如何以~C速度排放/排出异步发电机?

2024-04-20 16:36:08 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正在使用async for _ in asyncgen(): pass

我正在寻找“快速路线”实现,同步生成器的方法是:

deque(maxlen=0).extend(generator)

Tags: 方法inforasyncpassgenerator路线extend
1条回答
网友
1楼 · 发布于 2024-04-20 16:36:08

没有回答您的问题:

对于普通生成器,deque似乎比for循环快slightly(超过10%)。有人可能会说,使用deque不会带来任何实际的好处,也不值得它的不可靠和可能的副作用。你知道吗

但是当我们谈论异步编程时,它变得更加重要。Wordasync告诉我们在这个异步生成器中发生了一些I/O:否则,首先就有no reason使这个生成器异步。此I/O可能占用99%的执行时间(请参见this answer,尤其是最后一段代码)。它将把10%的快速迭代优势转化为完全糟糕的东西。你知道吗

在所有的优化工作投入之后,我们不会看到异步for循环和替代方法之间有任何可测量的差异。你知道吗

一般来说,“过早优化是万恶之源”,只有“3%的关键代码”is worth optimizing。这3%只能在测量之后说,当谈到异步编程时,它可能是I/O的东西,而不是迭代。你知道吗


回答您的问题:

deque比for循环工作得更快,因为它是C中的implemented。没有(我知道)C实现类似的函数来处理异步iterables。因此,如果您不想编写C代码,async for _ in asyncgen(): pass恐怕是您现在唯一的选择。你知道吗

相关问题 更多 >