当前我正在使用async for _ in asyncgen(): pass
我正在寻找“快速路由”实现,用于同步生成器的方法是:
deque(maxlen=0).extend(generator)
答案 0 :(得分:4)
不是您的问题的答案:
对于普通生成器,deque
似乎比for循环快slightly(超过10%)。有人可能会说,使用deque
不会带来任何实际优势,并且不值得其不可靠和可能产生的副作用。
但是当我们谈论异步编程时,它变得更加重要。单词async
告诉我们,这个异步生成器内部发生了一些I / O:否则,有no reason首先使该生成器异步。该I / O可能会占用99%的执行时间(请参见this answer,尤其是那里的最后一个代码段)。它将快速迭代优势的10%转变为完全悲惨的事情。
在进行了所有优化之后,我们只是看不到异步for循环和替代方法之间的可测量差异。
通常来说,“过早的优化是万恶之源”,只有“关键代码的3%” is worth optimizing。只能在测量后说出3%的数据,而对于异步编程,它可能是I / O内容,而不是迭代。
问题的答案:
deque
比for循环工作更快,仅是因为它在C语言中是implemented。没有(我所知道的)可与异步可迭代对象一起使用的类似函数的C实现。因此,如果您不想编写C代码,恐怕async for _ in asyncgen(): pass
是您现在唯一的选择。