【发布时间】:2019-08-27 12:52:50
【问题描述】:
目前我正在使用async for _ in asyncgen(): pass
我正在寻找“快速路线”实现,同步生成器的方法是:
deque(maxlen=0).extend(generator)
【问题讨论】:
-
经过快速基准测试后,
deque(maxlen=0).extend(gen)似乎比for _ in gen: pass快了大约 20%。 deque 方法的 C 优化似乎不是这里的瓶颈:) -
我不明白。我知道双端队列消耗生成器的速度比其他任何东西都快。我希望为 async 生成器做同样的事情,deque 不能使用它,afaik
-
我的意思是,20% 的加速并不是切换到基于 C 的方法所期望的(我通常期望像 10 倍的因子改进)。那是因为瓶颈在其他地方:缓慢的部分不是生成器的耗尽,而是该生成器中 python 代码的执行。我的建议是不要打扰并使用
for _ in gen: pass或async for _ in agen。 -
请注意,双端队列并不总是更快;一个简单的
for循环对小序列更有效。 (在我的机器上,截止点大约是 16 个元素。)
标签: python async-await generator python-asyncio