concurrent.futures.as_completed如何工作?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了concurrent.futures.as_completed如何工作?相关的知识,希望对你有一定的参考价值。
我正在学习python并发性,并且我介绍了期货的概念。我读到as_completed()
采用了可迭代的期货,并在完成后收益。
我想知道它是如何在内部工作的。是否立即产生完成的任务(期货)?一种天真的方法是迭代所有未来并使用done()
检查每一个未来,但这是低效的。
那么这个功能背后的魔力是什么?
谢谢!
答案
我想知道它是如何在内部工作的。
as_completed
在未来完成时设置了一个回调,对所有收到的期货都这样做。 (为此目的,它使用等效于add_done_callback
的内部API。)当任何期货完成时,as_completed
将通过其回调运行通知。回调运行在完成未来的任何线程中,因此它只设置一个event,它由所有回调共享,并且as_completed
会睡觉。一旦被事件唤醒,as_completed
立即产生完成的未来。这就是as_completed
如何确保期货在完成时得到的,无论发生的顺序如何。在屈服之后,事件被清除并且重复等待直到所有期货完成。
是否立即产生完成的任务(期货)?
是的,来自documented interface和implementation。
以上是关于concurrent.futures.as_completed如何工作?的主要内容,如果未能解决你的问题,请参考以下文章