2024-04-20 16:36:08 发布
网友
目前我正在使用async for _ in asyncgen(): pass
async for _ in asyncgen(): pass
我正在寻找“快速路线”实现,同步生成器的方法是:
deque(maxlen=0).extend(generator)
没有回答您的问题:
对于普通生成器,deque似乎比for循环快slightly(超过10%)。有人可能会说,使用deque不会带来任何实际的好处,也不值得它的不可靠和可能的副作用。你知道吗
deque
但是当我们谈论异步编程时,它变得更加重要。Wordasync告诉我们在这个异步生成器中发生了一些I/O:否则,首先就有no reason使这个生成器异步。此I/O可能占用99%的执行时间(请参见this answer,尤其是最后一段代码)。它将把10%的快速迭代优势转化为完全糟糕的东西。你知道吗
async
在所有的优化工作投入之后,我们不会看到异步for循环和替代方法之间有任何可测量的差异。你知道吗
一般来说,“过早优化是万恶之源”,只有“3%的关键代码”is worth optimizing。这3%只能在测量之后说,当谈到异步编程时,它可能是I/O的东西,而不是迭代。你知道吗
回答您的问题:
deque比for循环工作得更快,因为它是C中的implemented。没有(我知道)C实现类似的函数来处理异步iterables。因此,如果您不想编写C代码,async for _ in asyncgen(): pass恐怕是您现在唯一的选择。你知道吗
没有回答您的问题:
对于普通生成器,
deque
似乎比for循环快slightly(超过10%)。有人可能会说,使用deque
不会带来任何实际的好处,也不值得它的不可靠和可能的副作用。你知道吗但是当我们谈论异步编程时,它变得更加重要。Word
async
告诉我们在这个异步生成器中发生了一些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
恐怕是您现在唯一的选择。你知道吗相关问题 更多 >
编程相关推荐