成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Python]在一段Python程序中使用多次事件循環(huán)

dreamtecher / 2404人閱讀

摘要:解決方案我們可以使用函數(shù)建立一個(gè)新的事件循環(huán),并使用設(shè)置全局的事件循環(huán),這時(shí)候就可以多次運(yùn)行異步的事件循環(huán)了,不過最好保存默認(rèn)的并在事件循環(huán)結(jié)束的時(shí)候還原回去。

背景

我們?cè)赑ython異步程序編寫中經(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()

這當(dāng)然是很不錯(cuò)的,但當(dāng)你第二次使用loop的時(shí)候程序就會(huì)拋出異常RuntimeError: Event loop is closed,這也無可厚非,理想的程序也應(yīng)該是在一個(gè)時(shí)間循環(huán)中解決掉各種異步IO的問題。
但放在終端環(huán)境如Ipython中,如果想要練習(xí)Python的異步程序的編寫的話每次都要重新開啟終端未免太過于麻煩,這時(shí)候要探尋有沒有更好的解決方案。

解決方案

我們可以使用asyncio.new_event_loop函數(shù)建立一個(gè)新的事件循環(huán),并使用asyncio.set_event_loop設(shè)置全局的事件循環(huán),這時(shí)候就可以多次運(yùn)行異步的事件循環(huán)了,不過最好保存默認(rèn)的asyncio.get_event_loop并在事件循環(huán)結(jié)束的時(shí)候還原回去。
最終我們的代碼就像這樣。

代碼
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代碼中還是只用一個(gè)默認(rèn)的事件循環(huán)比較好,平時(shí)的學(xué)習(xí)練習(xí)的話倒是隨意了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40805.html

相關(guān)文章

  • [零基礎(chǔ)學(xué)python]用while來循環(huán)

    摘要:我在這里將他寫的程序恭錄于此,單元李航同學(xué)不要見怪,如果李航同學(xué)認(rèn)為此舉侵犯了自己的知識(shí)產(chǎn)權(quán),可以告知我,我馬上撤下此代碼。我用的是,在輸入指令上區(qū)別于李同學(xué)程序用變量接收了輸入的內(nèi)容。 while,翻譯成中文是當(dāng)...的時(shí)候,這個(gè)單詞在英語中,常常用來做為時(shí)間狀語,while ... someone do somthing,這種類型的說法是有的。在python中,它也有這個(gè)含義,不過...

    Tony 評(píng)論0 收藏0
  • python并發(fā)2:使用asyncio處理并發(fā)

    摘要:是之后引入的標(biāo)準(zhǔn)庫的,這個(gè)包使用事件循環(huán)驅(qū)動(dòng)的協(xié)程實(shí)現(xiàn)并發(fā)。沒有能從外部終止線程,因?yàn)榫€程隨時(shí)可能被中斷。上一篇并發(fā)使用處理并發(fā)我們介紹過的,在中,只是調(diào)度執(zhí)行某物的結(jié)果。 asyncio asyncio 是Python3.4 之后引入的標(biāo)準(zhǔn)庫的,這個(gè)包使用事件循環(huán)驅(qū)動(dòng)的協(xié)程實(shí)現(xiàn)并發(fā)。asyncio 包在引入標(biāo)準(zhǔn)庫之前代號(hào) Tulip(郁金香),所以在網(wǎng)上搜索資料時(shí),會(huì)經(jīng)??吹竭@種花的...

    wushuiyong 評(píng)論0 收藏0
  • python入門,編程基礎(chǔ)概念介紹(變量,條件,函數(shù),循環(huán)

    摘要:該系列文章入門,編程基礎(chǔ)概念介紹變量,條件,函數(shù),循環(huán)中的數(shù)據(jù)類型,,,,在中創(chuàng)建對(duì)象學(xué)一門編程語言正在變得越來越容易,只要念過高中甚至是初中小學(xué),能熟練聊和懂得一點(diǎn)點(diǎn)軟件的人,入門一門編程語言都不在話下。 該系列文章: 《python入門,編程基礎(chǔ)概念介紹(變量,條件,函數(shù),循環(huán))》 《python中的數(shù)據(jù)類型(list,tuple,dict,set,None)》 《在python...

    Bryan 評(píng)論0 收藏0
  • 談?wù)?em>Python協(xié)程技術(shù)的演進(jìn)

    摘要:事件循環(huán)是異步編程的底層基石。對(duì)事件集合進(jìn)行輪詢,調(diào)用回調(diào)函數(shù)等一輪事件循環(huán)結(jié)束,循環(huán)往復(fù)。協(xié)程直接利用代碼的執(zhí)行位置來表示狀態(tài),而回調(diào)則是維護(hù)了一堆數(shù)據(jù)結(jié)構(gòu)來處理狀態(tài)。時(shí)代的協(xié)程技術(shù)主要是,另一個(gè)比較小眾。 Coding Crush Python開發(fā)工程師 主要負(fù)責(zé)豈安科技業(yè)務(wù)風(fēng)險(xiǎn)情報(bào)系統(tǒng)redq。 引言 1.1. 存儲(chǔ)器山 存儲(chǔ)器山是 Randal Bryant 在《深入...

    zhiwei 評(píng)論0 收藏0
  • [零基礎(chǔ)學(xué)Python]做一個(gè)小游戲

    摘要:在講述有關(guān)的時(shí)候,提到做游戲的事情后來這個(gè)事情一直沒有接續(xù)?,F(xiàn)在就是開始做那個(gè)游戲的時(shí)候了。游戲過程描述程序運(yùn)行起來,隨機(jī)在某個(gè)范圍內(nèi)選擇一個(gè)整數(shù)。我們現(xiàn)在做一個(gè)很小的程序,也是這樣來做。這個(gè)游戲還沒有完呢,即使用了循環(huán),后面還會(huì)繼續(xù)。 在講述有關(guān)list的時(shí)候,提到做游戲的事情,后來這個(gè)事情一直沒有接續(xù)。不是忘記了,是在想在哪個(gè)階段做最合適。經(jīng)過一段時(shí)間學(xué)習(xí),看官已經(jīng)不是純粹小白了,...

    idisfkj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<