11import timeit
22
3- QS = ("amqplib.benchmark" , "librabbit.benchmark" )
4-
5-
63INIT_COMMON = """
74connection = amqp.Connection(hostname="localhost", userid="guest",
8- password="guest", virtual_host="/")
5+ password="guest", virtual_host="/", lazy=True)
6+ connection.connect()
97channel = connection.channel()
108channel.exchange_declare(Q, "direct")
119channel.queue_declare(Q)
1210channel.queue_bind(Q, Q, Q)
1311"""
1412
15- INIT_AMQPLIB = """
16- from amqplib import client_0_8 as amqp
17- Q = "amqplib .benchmark"
13+ INIT_AMQP = """
14+ import amqp
15+ Q = "amqp .benchmark"
1816%s
1917""" % INIT_COMMON
2018
3533"""
3634
3735CONSUME = """
38- method = getattr(channel, "wait", None) or connection.drain_events
36+ method = connection.drain_events
3937def callback(m):
4038 channel.basic_ack(m.delivery_info["delivery_tag"])
4139channel.basic_consume(Q, callback=callback)
@@ -45,31 +43,45 @@ def callback(m):
4543
4644
4745def bench_basic_publish (iterations = 10000 , bytes = 256 ):
48- t_publish_amqplib = timeit .Timer (stmt = PUBLISH % bytes ,
49- setup = INIT_AMQPLIB )
46+ t_publish_amqp = timeit .Timer (stmt = PUBLISH % bytes ,
47+ setup = INIT_AMQP )
5048 t_publish_librabbit = timeit .Timer (stmt = PUBLISH_LIBRABBIT % bytes ,
5149 setup = INIT_LIBRABBIT )
52- print ("basic.publish: (%s byte messages)" % bytes )
53- print (" amqplib: %.2f usec/pass" % (
54- iterations * t_publish_amqplib .timeit (number = iterations )/ iterations ))
55- print (" librabbit: %.2f usec/pass" % (
56- iterations * t_publish_librabbit .timeit (number = iterations )/ iterations ))
50+ print ("basic.publish: (%s x %s bytes messages)" % (iterations , bytes ))
51+ print (" amqp: %.2f sec/pass" % (
52+ iterations * t_publish_amqp .timeit (number = iterations )/ iterations )
53+ )
54+ print (" librabbit: %.2f sec/pass" % (
55+ iterations * t_publish_librabbit .timeit (number = iterations )/ iterations )
56+ )
5757
58- def bench_basic_consume (iterations = 10000 ):
58+ def bench_basic_consume (iterations = 10000 , bytes = None ):
5959 context = {"its" : (iterations / 2 )/ 10 }
60- t_consume_amqplib = timeit .Timer (stmt = CONSUME % context ,
61- setup = INIT_AMQPLIB )
60+ t_consume_amqp = timeit .Timer (stmt = CONSUME % context ,
61+ setup = INIT_AMQP )
6262 t_consume_librabbit = timeit .Timer (stmt = CONSUME % context ,
6363 setup = INIT_LIBRABBIT )
6464 print ("basic.consume (%s msg/pass) " % context ["its" ])
65- print (" amqplib: %.2f usec/pass" % (
66- 10 * t_consume_amqplib .timeit (number = 10 )/ 10 ))
67- print (" librabbit: %.2f usec/pass" % (
68- 10 * t_consume_librabbit .timeit (number = 10 )/ 10 ))
65+ print (" amqp: %.2f sec/pass" % (
66+ t_consume_amqp .timeit (number = 10 ))
67+ )
68+ print (" librabbit: %.2f sec/pass" % (
69+ t_consume_librabbit .timeit (number = 10 ))
70+ )
71+
6972benchmarks = [bench_basic_publish , bench_basic_consume ]
7073
7174if __name__ == "__main__" :
75+ import argparse
76+
77+ parser = argparse .ArgumentParser (description = 'Runs benchmark against local RabbitMQ instance.' )
78+ parser .add_argument ('--iters' , metavar = 'N' , type = int , default = 100000 ,
79+ help = 'Number of iterations' )
80+ parser .add_argument ('--bytes' , metavar = 'B' , type = int ,
81+ default = 256 , help = 'Message size' )
82+
83+ args = parser .parse_args ()
7284 for benchmark in benchmarks :
73- benchmark (100000 )
85+ benchmark (args . iters , bytes = args . bytes )
7486
7587
0 commit comments