async get_event_loop


以下論述轉載自https://segmentfault.com/q/1010000007863971

答主論述清晰,很不錯,可參考他的其他答案

首先,event loop 就是一個普通 Python 對象,您可以通過 asyncio.new_event_loop() 創建無數個 event loop 對象。只不過,loop.run_xxx() 家族的函數都是阻塞的,比如 run_until_complete() 會等到給定的 coroutine 完成再結束,而 run_forever() 則會永遠阻塞當前線程,直到有人停止了該 event loop 為止。所以在同一個線程里,兩個 event loop 無法同時 run,但這不能阻止您用兩個線程分別跑兩個 event loop。

 

初始情況下,get_event_loop() 只會在主線程幫您創建新的 event loop,並且在主線程中多次調用始終返回該 event loop;而在其他線程中調用 get_event_loop() 則會報錯,除非您在這些線程里面手動調用過 set_event_loop()

 

我自己的補充:

new_event_loop()是創建一個eventloop對象,而set_event_loop(eventloop對象)是將eventloop對象指定為當前線程的eventloop,一個線程內只允許運行一個eventloop,,意味着不能有兩個eventloop交替運行。這兩者一般搭配使用,用於給非主線程創建eventloop。如果是主線程,則只需要get_event_loop就可以了,也就是說,我們想運用攜程,首先要生成一個loop對象,然后loop.run_xxx()就可以運行攜程了,而如何創建這個loop,對於主線程是loop=get_event_loop().對於其他線程需要首先loop=new_event_loop(),然后set_event_loop(loop).

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM