gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:42:55 25 4
gpt4 key购买 nike

目前在 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com