python異步中l(wèi)oop拋出異常的解決
1、問題分析
第二次使用loop的時候程序就會拋出異常RuntimeError:Eventloopisclosed,這也無可厚非,理想的程序也應(yīng)該是在一個時間循環(huán)中解決掉各種異步IO的問題。但放在終端環(huán)境如Ipython中,如果想要練習(xí)Python的異步程序的編寫的話每次都要重新開啟終端未免太過于麻煩。
2、解決
使用asyncio.new_event_loop函數(shù)建立一個新的事件循環(huán),并使用asyncio.set_event_loop設(shè)置全局的事件循環(huán),這樣就可以多次運(yùn)行異步的事件循環(huán),不過最好保存默認(rèn)的asyncio.get_event_loop并在事件循環(huán)結(jié)束的時候還原回去。最終我們的代碼就像這樣。
importasyncio
asyncdefdoAsync():
awaitasyncio.sleep(0)
#...
defrunEventLoop()
loop=asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(doAsync())
loop.close()
if__name__=="__main__":
oldloop=asyncio.get_event_loop()
runEventLoop()
runEventLoop()
asyncio.set_event_loop(oldloop)
以上就是Python異步中l(wèi)oop拋出異常的解決,希望能對大家有所幫助。更多Python學(xué)習(xí)教程請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。