摘要:解決方案我們可以使用函數(shù)建立一個新的事件循環(huán),并使用設(shè)置全局的事件循環(huán),這時候就可以多次運行異步的事件循環(huán)了,不過最好保存默認的并在事件循環(huán)結(jié)束的時候還原回去。
背景
我們在Python異步程序編寫中經(jīng)常要用到如下的結(jié)構(gòu)
import asyncio async def doAsync(): await asyncio.sleep(0) #... if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(doAsync()) loop.close()
這當然是很不錯的,但當你第二次使用loop的時候程序就會拋出異常RuntimeError: Event loop is closed,這也無可厚非,理想的程序也應(yīng)該是在一個時間循環(huán)中解決掉各種異步IO的問題。
但放在終端環(huán)境如Ipython中,如果想要練習(xí)Python的異步程序的編寫的話每次都要重新開啟終端未免太過于麻煩,這時候要探尋有沒有更好的解決方案。
我們可以使用asyncio.new_event_loop函數(shù)建立一個新的事件循環(huán),并使用asyncio.set_event_loop設(shè)置全局的事件循環(huán),這時候就可以多次運行異步的事件循環(huán)了,不過最好保存默認的asyncio.get_event_loop并在事件循環(huán)結(jié)束的時候還原回去。
最終我們的代碼就像這樣。
import asyncio async def doAsync(): await asyncio.sleep(0) #... def runEventLoop() 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)感想
事件循環(huán)本來就是要一起做很多事情,在正式的Python代碼中還是只用一個默認的事件循環(huán)比較好,平時的學(xué)習(xí)練習(xí)的話倒是隨意了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/40805.html
摘要:我在這里將他寫的程序恭錄于此,單元李航同學(xué)不要見怪,如果李航同學(xué)認為此舉侵犯了自己的知識產(chǎn)權(quán),可以告知我,我馬上撤下此代碼。我用的是,在輸入指令上區(qū)別于李同學(xué)程序用變量接收了輸入的內(nèi)容。 while,翻譯成中文是當...的時候,這個單詞在英語中,常常用來做為時間狀語,while ... someone do somthing,這種類型的說法是有的。在python中,它也有這個含義,不過...
摘要:是之后引入的標準庫的,這個包使用事件循環(huán)驅(qū)動的協(xié)程實現(xiàn)并發(fā)。沒有能從外部終止線程,因為線程隨時可能被中斷。上一篇并發(fā)使用處理并發(fā)我們介紹過的,在中,只是調(diào)度執(zhí)行某物的結(jié)果。 asyncio asyncio 是Python3.4 之后引入的標準庫的,這個包使用事件循環(huán)驅(qū)動的協(xié)程實現(xiàn)并發(fā)。asyncio 包在引入標準庫之前代號 Tulip(郁金香),所以在網(wǎng)上搜索資料時,會經(jīng)常看到這種花的...
摘要:該系列文章入門,編程基礎(chǔ)概念介紹變量,條件,函數(shù),循環(huán)中的數(shù)據(jù)類型,,,,在中創(chuàng)建對象學(xué)一門編程語言正在變得越來越容易,只要念過高中甚至是初中小學(xué),能熟練聊和懂得一點點軟件的人,入門一門編程語言都不在話下。 該系列文章: 《python入門,編程基礎(chǔ)概念介紹(變量,條件,函數(shù),循環(huán))》 《python中的數(shù)據(jù)類型(list,tuple,dict,set,None)》 《在python...
摘要:事件循環(huán)是異步編程的底層基石。對事件集合進行輪詢,調(diào)用回調(diào)函數(shù)等一輪事件循環(huán)結(jié)束,循環(huán)往復(fù)。協(xié)程直接利用代碼的執(zhí)行位置來表示狀態(tài),而回調(diào)則是維護了一堆數(shù)據(jù)結(jié)構(gòu)來處理狀態(tài)。時代的協(xié)程技術(shù)主要是,另一個比較小眾。 Coding Crush Python開發(fā)工程師 主要負責(zé)豈安科技業(yè)務(wù)風(fēng)險情報系統(tǒng)redq。 引言 1.1. 存儲器山 存儲器山是 Randal Bryant 在《深入...
摘要:在講述有關(guān)的時候,提到做游戲的事情后來這個事情一直沒有接續(xù)。現(xiàn)在就是開始做那個游戲的時候了。游戲過程描述程序運行起來,隨機在某個范圍內(nèi)選擇一個整數(shù)。我們現(xiàn)在做一個很小的程序,也是這樣來做。這個游戲還沒有完呢,即使用了循環(huán),后面還會繼續(xù)。 在講述有關(guān)list的時候,提到做游戲的事情,后來這個事情一直沒有接續(xù)。不是忘記了,是在想在哪個階段做最合適。經(jīng)過一段時間學(xué)習(xí),看官已經(jīng)不是純粹小白了,...
閱讀 3407·2023-04-25 20:37
閱讀 3149·2021-09-07 09:59
閱讀 1673·2019-08-29 12:43
閱讀 1193·2019-08-28 18:27
閱讀 486·2019-08-26 13:50
閱讀 2037·2019-08-26 10:33
閱讀 3600·2019-08-23 18:39
閱讀 2404·2019-08-23 18:09