目前,在pzmq中有多种实现异步IO循环的方法,这些方法在文档中都提到过。http://pyzmq.readthedocs.io/en/latest/api/index.html
从纯粹的性能角度来看,文档中并不清楚这些选择是否等效。它们是:
那么,在典型的推挽场景中,哪一个具有最佳的每秒消息吞吐量,如文档示例所示?为什么我们看到他们之间的区别?
发布于 2016-07-17 14:10:44
结果
与我的预期相反,pyzmq中的异步实现似乎都比“遗留”龙卷风一号慢。
龙卷风@gen.coroutine:
Avg. Speed: 2160.26 msg/s本地@asyncio.coroutine:
Avg. Speed: 1697.66 msg/s龙卷风异步:
Avg. Speed: 1695.29 msg/s另外,这两个异步实现不时地显示高达3536.27 msg/s的突发,而Tornado @gen.coroutine在吞吐量上非常稳定。
测试代码
为了比较,我使用了以下修改版本:
龙卷风@gen.coroutine:https://github.com/zeromq/pyzmq/blob/master/examples/eventloop/coroutines.py
原生@asyncio.coroutine:https://github.com/zeromq/pyzmq/blob/master/examples/asyncio/coroutines.py
龙卷风异步:(仅限Python;包含附加打印协同线) 3.5+
修改包括每5秒显示平均消息数,而不是点。在拉协同线中,我增加n = n + 1,然后在打印协同线中计算v = n / (time.time() - start)并显示它。另外,我每10,000条消息重置一次n = 0和start = time.time(),以防止测量中的任何偏移效果。
环境
$ uname -a
Linux localhost 4.6.3-300.fc24.x86_64 #1 SMP Fri Jun 24 20:52:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ python3 --version
Python 3.5.1
>>> zmq.__version__
'15.3.0'
>>> tornado.version
'4.3'https://stackoverflow.com/questions/38422119
复制相似问题