Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 35 additions & 23 deletions benchmark.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
import timeit

QS = ("amqplib.benchmark", "librabbit.benchmark")


INIT_COMMON = """
connection = amqp.Connection(hostname="localhost", userid="guest",
password="guest", virtual_host="/")
password="guest", virtual_host="/", lazy=True)
connection.connect()
channel = connection.channel()
channel.exchange_declare(Q, "direct")
channel.queue_declare(Q)
channel.queue_bind(Q, Q, Q)
"""

INIT_AMQPLIB = """
from amqplib import client_0_8 as amqp
Q = "amqplib.benchmark"
INIT_AMQP = """
import amqp
Q = "amqp.benchmark"
%s
""" % INIT_COMMON

Expand All @@ -35,7 +33,7 @@
"""

CONSUME = """
method = getattr(channel, "wait", None) or connection.drain_events
method = connection.drain_events
def callback(m):
channel.basic_ack(m.delivery_info["delivery_tag"])
channel.basic_consume(Q, callback=callback)
Expand All @@ -45,31 +43,45 @@ def callback(m):


def bench_basic_publish(iterations=10000, bytes=256):
t_publish_amqplib = timeit.Timer(stmt=PUBLISH % bytes,
setup=INIT_AMQPLIB)
t_publish_amqp = timeit.Timer(stmt=PUBLISH % bytes,
setup=INIT_AMQP)
t_publish_librabbit = timeit.Timer(stmt=PUBLISH_LIBRABBIT % bytes,
setup=INIT_LIBRABBIT)
print("basic.publish: (%s byte messages)" % bytes)
print(" amqplib: %.2f usec/pass" % (
iterations * t_publish_amqplib.timeit(number=iterations)/iterations))
print(" librabbit: %.2f usec/pass" % (
iterations * t_publish_librabbit.timeit(number=iterations)/iterations))
print("basic.publish: (%s x %s bytes messages)" % (iterations, bytes))
print(" amqp: %.2f sec/pass" % (
iterations * t_publish_amqp.timeit(number=iterations)/iterations)
)
print(" librabbit: %.2f sec/pass" % (
iterations * t_publish_librabbit.timeit(number=iterations)/iterations)
)

def bench_basic_consume(iterations=10000):
def bench_basic_consume(iterations=10000, bytes=None):
context = {"its": (iterations/2)/10}
t_consume_amqplib = timeit.Timer(stmt=CONSUME % context,
setup=INIT_AMQPLIB)
t_consume_amqp = timeit.Timer(stmt=CONSUME % context,
setup=INIT_AMQP)
t_consume_librabbit = timeit.Timer(stmt=CONSUME % context,
setup=INIT_LIBRABBIT)
print("basic.consume (%s msg/pass) " % context["its"])
print(" amqplib: %.2f usec/pass" % (
10 * t_consume_amqplib.timeit(number=10)/10))
print(" librabbit: %.2f usec/pass" % (
10 * t_consume_librabbit.timeit(number=10)/10))
print(" amqp: %.2f sec/pass" % (
t_consume_amqp.timeit(number=10))
)
print(" librabbit: %.2f sec/pass" % (
t_consume_librabbit.timeit(number=10))
)

benchmarks = [bench_basic_publish, bench_basic_consume]

if __name__ == "__main__":
import argparse

parser = argparse.ArgumentParser(description='Runs benchmark against local RabbitMQ instance.')
parser.add_argument('--iters', metavar='N', type=int, default=100000,
help='Number of iterations')
parser.add_argument('--bytes', metavar='B', type=int,
default=256, help='Message size')

args = parser.parse_args()
for benchmark in benchmarks:
benchmark(100000)
benchmark(args.iters, bytes=args.bytes)