concurrent.futures.as_completed如何工作?

blu*_*een 9 python concurrency multithreading python-3.x concurrent.futures

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

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

那么这个功能背后的魔力是什么?

谢谢!

use*_*342 10

我想知道它是如何在内部工作的.

as_completed设置回调以在未来完成时触发,对所收到的所有期货都这样做.(它使用与add_done_callback此目的等效的内部API .)当任何期货完成时,as_completed将通过其回调运行通知.回调运行在完成未来的任何线程中,因此它只设置一个事件,该事件由所有回调共享,并且会as_completed休眠.一旦被事件唤醒,as_completed立即产生完成的未来.这就是as_completed确保期货在完成时产生的方式,无论其发生的顺序如何.在屈服之后,事件被清除并且重复等待直到所有期货完成.

是否立即产生完成的任务(期货)?

是的,这是从文档化的界面实现中得出的.