parallel.futures.as_completed如何工作?

我正在学习python并发性,并向我介绍了Future的概念。我读到这as_completed()需要一个可迭代的期货,并在完成时产生它们。

我想知道它在内部如何工作。它会立即产生完成的任务(未来)吗?天真的方法是迭代所有期货并使用来检查每个期货done(),但这效率低下。

那么,此功能背后的魔力是什么?


蓝山帝景
浏览 226回答 1
1回答

猛跑小猪

我想知道它在内部如何工作。as_completed设置一个回调,以在将来完成时触发,从而针对收到的所有将来执行此操作。(add_done_callback为此,它使用等效于此功能的内部API 。)当任何期货完成时,as_completed都会通过其回调运行来通知。该回调函数在将来完成该线程的任何线程中运行,因此它仅设置一个event,该事件由所有回调函数共享,并且一直在as_completed休眠。一旦被事件唤醒,as_completed立即产生完成的未来。通过这种方式,as_completed可以确保期货在完成时能够收益,而与发生的顺序无关。屈服后,将清除事件,并重复等待,直到完成所有期货为止。它会立即产生完成的任务(未来)吗?是的,这既来自文档化的接口,也来自于实现。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python