我正在學(xué)習(xí)python并發(fā)性,并向我介紹了Future的概念。我讀到這as_completed()需要一個(gè)可迭代的期貨,并在完成時(shí)產(chǎn)生它們。我想知道它在內(nèi)部如何工作。它會立即產(chǎn)生完成的任務(wù)(未來)嗎?天真的方法是迭代所有期貨并使用來檢查每個(gè)期貨done(),但這效率低下。那么,此功能背后的魔力是什么?
1 回答

猛跑小豬
TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
我想知道它在內(nèi)部如何工作。
as_completed
設(shè)置一個(gè)回調(diào),以在將來完成時(shí)觸發(fā),從而針對收到的所有將來執(zhí)行此操作。(add_done_callback
為此,它使用等效于此功能的內(nèi)部API 。)當(dāng)任何期貨完成時(shí),as_completed
都會通過其回調(diào)運(yùn)行來通知。該回調(diào)函數(shù)在將來完成該線程的任何線程中運(yùn)行,因此它僅設(shè)置一個(gè)event,該事件由所有回調(diào)函數(shù)共享,并且一直在as_completed
休眠。一旦被事件喚醒,as_completed
立即產(chǎn)生完成的未來。通過這種方式,as_completed
可以確保期貨在完成時(shí)能夠收益,而與發(fā)生的順序無關(guān)。屈服后,將清除事件,并重復(fù)等待,直到完成所有期貨為止。
它會立即產(chǎn)生完成的任務(wù)(未來)嗎?
是的,這既來自文檔化的接口,也來自于實(shí)現(xiàn)。
添加回答
舉報(bào)
0/150
提交
取消