Created
February 17, 2020 22:50
-
-
Save eirikrye/dca124c0ebb320149627979103406b66 to your computer and use it in GitHub Desktop.
multi_bench.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import asyncio | |
import time | |
from contextlib import contextmanager | |
import uvloop | |
uvloop.install() | |
@contextmanager | |
def time_it(name: str, iterations: int): | |
start = time.perf_counter_ns() | |
yield None | |
elapsed = time.perf_counter_ns() - start | |
print( | |
f"[{name[:20]:20}] {iterations} iterations, {elapsed / iterations / 1000:.1f}µs/it, total: {elapsed * 1e-6:.1f}ms" | |
) | |
async def bench_aioredis(iterations: int): | |
import aioredis | |
redis = await aioredis.create_redis("redis://localhost") | |
await redis.flushdb() | |
with time_it("aioredis pipeline", iterations): | |
tr = redis.pipeline() | |
for _ in range(iterations): | |
tr.set("foo", "bar") | |
res = await tr.execute() | |
assert len(res) == iterations | |
with time_it("aioredis transaction", iterations): | |
tr = redis.multi_exec() | |
for _ in range(iterations): | |
tr.set("foo", "bar") | |
res = await tr.execute() | |
assert len(res) == iterations | |
redis.close() | |
await redis.wait_closed() | |
async def bench_aredis(iterations: int): | |
import aredis | |
redis = aredis.StrictRedis("localhost") | |
await redis.flushdb() | |
with time_it("aredis pipeline", iterations): | |
async with await redis.pipeline(transaction=False) as tr: | |
for _ in range(iterations): | |
await tr.set("foo", "bar") | |
res = await tr.execute() | |
assert len(res) == iterations | |
with time_it("aredis transaction", iterations): | |
async with await redis.pipeline(transaction=False) as tr: | |
for _ in range(iterations): | |
await tr.set("foo", "bar") | |
res = await tr.execute() | |
assert len(res) == iterations | |
async def bench_sider(iterations: int): | |
import sider | |
redis = await sider.RedisClient("localhost").connect() | |
await redis.command("flushdb") | |
with time_it("sider pipeline", iterations): | |
tr = redis.pipeline() | |
for _ in range(iterations): | |
tr.command("set", "foo", "bar") | |
res = await tr.execute() | |
assert len(res) == iterations | |
with time_it("sider transaction", iterations): | |
tr = redis.pipeline() | |
for _ in range(iterations): | |
tr.command("set", "foo", "bar") | |
res = await tr.execute(transaction=True) | |
assert len(res) == iterations | |
await redis.close() | |
async def main(): | |
for iterations in [100, 1000, 10000, 50000, 100000]: | |
await bench_aioredis(iterations) | |
await bench_aredis(iterations) | |
# await bench_sider(iterations) | |
asyncio.run(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment