performance - 哪个 pyzmq 实现在 @gen.coroutine、@asyncio.coroutine 和 async 之间具有最快的吞吐量?

标签 performance python-3.x tornado zeromq pyzmq

目前在 pzmq 中有多种方法来实现文档中提到的异步 IO 循环。
http://pyzmq.readthedocs.io/en/latest/api/index.html

从纯性能的角度来看,文档中并不清楚这些选择是否等效。这些是:

  • Tornado @gen.coroutine
  • 原生@asyncio.coroutine
  • Tornado 异步

  • 那么,如文档示例中所示,在典型的 PUSH-PULL 场景中,哪一个具有最佳的每秒消息吞吐量?为什么我们会看到它们之间的差异?

    最佳答案

    结果

    与我的预期相反,pyzmq 中的两个 asyncio 实现似乎都比“传统” Tornado 实现慢。

    Tornado @gen.coroutine:

    Avg. Speed: 2160.26 msg/s
    

    原生@asyncio.coroutine:
    Avg. Speed: 1697.66 msg/s
    

    Tornado 异步:
    Avg. Speed: 1695.29 msg/s
    

    此外,两个 asyncio 实现时不时地显示高达 3536.27 msg/s 的突发,而 Tornado @gen.coroutine 在吞吐量方面非常稳定。

    测试代码

    为了比较,我使用了以下修改版本:

    Tornado @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

    Tornado 异步:(仅限 Python 3.5+;包括额外的打印协程)
    https://github.com/zeromq/pyzmq/blob/master/examples/asyncio/tornado_asyncio.py

    修改包括每 5 秒显示每秒平均消息数而不是点。在 PULL 协程中,我增加了 n = n + 1然后在打印协程中我计算 v = n / (time.time() - start)并显示它。也在那里,我重置了 n = 0start = time.time()每 10,000 条消息,以防止测量中的任何偏移影响。

    环境
    $ 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'
    

    关于performance - 哪个 pyzmq 实现在 @gen.coroutine、@asyncio.coroutine 和 async 之间具有最快的吞吐量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38422119/

    相关文章:

    performance - 什么是最快的 bzip2 解压器?

    sql - 从 friend 那里获取帖子(您有权查看)

    performance - MergeSort 中的两个递归调用是什么?

    performance - 在 Google Compute Engine/Amazon EC2 实例上使用 Neo4j 的最佳实践

    python - 如何按字母和最大数字对 CSV 文件进行排序。 python 3

    python - Tornado curl http客户端无法获取二进制文件

    python-3.x - 如何启动一次Python日志记录实例

    python - 将宽变长但重复特定列

    python - Tornado 应用程序布局。选项。

    python - Tornado:DummyFuture 不支持对结果进行阻塞