Python asyncio異步編程常見問題小結(jié)
今天繼續(xù)給大家介紹Python相關(guān)知識(shí),本文主要內(nèi)容是Python asyncio異步編程常見問題。
一、asyncio編程簡(jiǎn)單示例
首先,我們來看一段簡(jiǎn)單的Python asyncio異步編程代碼,相關(guān)代碼如下所示:
import asyncio
async def fun():
print(1)
await asyncio.sleep(2)
print(2)
return 3
async def main():
task_list=[
asyncio.create_task(fun()),
asyncio.create_task(fun())
]
done,pending=await asyncio.wait(task_list)
print(done)
asyncio.run(main())
在上述代碼中,我們使用了Task列表,將兩個(gè)fun()協(xié)程函數(shù)生成的Task對(duì)象添加到task列表中,最終實(shí)現(xiàn)了這兩個(gè)函數(shù)異步執(zhí)行。上述代碼執(zhí)行結(jié)果如下所示:

二、asyncio編程常見問題
下面,我們想要簡(jiǎn)單的修改一下上述代碼,我們把main()函數(shù)刪除,嘗試直接生成協(xié)程對(duì)象列表,結(jié)果如下所示:
import asyncio
async def fun():
print(1)
await asyncio.sleep(2)
print(2)
return 3
task_list=[
asyncio.create_task(fun()),
asyncio.create_task(fun())
]
done,pending=asyncio.run(asyncio.wait(task_list))
print(done)
上述代碼執(zhí)行結(jié)果如下所示:

三、報(bào)錯(cuò)原因及解決方案
從上圖中可以看出,上述代碼執(zhí)行報(bào)錯(cuò),錯(cuò)誤提示為:RuntimeError:no running event loop。
其實(shí),之所以出現(xiàn)上述報(bào)錯(cuò),直接原因在于當(dāng)前沒有事件循環(huán)。當(dāng)我們使用asyncio模塊來實(shí)現(xiàn)異步編程時(shí),asyncio模塊的優(yōu)點(diǎn)在于省略了我們創(chuàng)建事件循環(huán)的過程,但是這并不意味著asyncio異步編程不需要事件循環(huán)。事實(shí)上,在第一段代碼中,代碼:
asyncio.run(main())
在實(shí)際上創(chuàng)建了這個(gè)事件循環(huán),但是asyncio模塊屏蔽了這一細(xì)節(jié)。而正是因?yàn)橐呀?jīng)存在了事件循環(huán),因此我們才可以執(zhí)行命令:
done,pending=await asyncio.wait(task_list)
但是在上述代碼中,我們沒有創(chuàng)建事件循環(huán),而是直接將該代碼放到主程序中執(zhí)行,因此上述代碼會(huì)出現(xiàn)報(bào)錯(cuò)。
針對(duì)上述代碼,我們可以簡(jiǎn)單修改為以下內(nèi)容:
import asyncio
async def fun():
print(1)
await asyncio.sleep(2)
print(2)
return 3
task_list=[
fun(),
fun()
]
done,pending=asyncio.run(asyncio.wait(task_list))
print(done)
在上述代碼中,我們的Task列表中存放的是協(xié)程對(duì)象,而不是Task對(duì)象,這樣,我們?cè)趫?zhí)行asyncio.wait時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)事件循環(huán),并且把協(xié)程對(duì)象加入到事件循環(huán)中。因此上述代碼也就不會(huì)報(bào)錯(cuò)了。執(zhí)行結(jié)果如下所示:

到此這篇關(guān)于Python asyncio異步編程常見問題小結(jié)的文章就介紹到這了,更多相關(guān)Python asyncio異步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python使用asyncio實(shí)現(xiàn)異步操作的示例
- Python中asyncio的多種用法舉例(異步同步)
- Python使用asyncio處理異步編程的代碼示例
- Python使用asyncio包實(shí)現(xiàn)異步編程方式
- Python異步庫asyncio、aiohttp詳解
- python協(xié)程異步IO中asyncio的使用
- Python使用asyncio標(biāo)準(zhǔn)庫對(duì)異步IO的支持
- Python協(xié)程異步爬取數(shù)據(jù)(asyncio+aiohttp)實(shí)例
- Python使用asyncio異步時(shí)的常見問題總結(jié)
- Python asyncio異步編程簡(jiǎn)單實(shí)現(xiàn)示例
- Python中asyncio庫實(shí)現(xiàn)異步編程的示例
相關(guān)文章
Flask框架使用DBUtils模塊連接數(shù)據(jù)庫操作示例
這篇文章主要介紹了Flask框架使用DBUtils模塊連接數(shù)據(jù)庫操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了flask框架使用DBUtils模塊連接數(shù)據(jù)庫的常見操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-07-07
Python之torch.no_grad()函數(shù)使用和示例
這篇文章主要介紹了Python之torch.no_grad()函數(shù)使用和示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Django model 中設(shè)置聯(lián)合約束和聯(lián)合索引的方法
今天小編就為大家分享一篇Django model 中設(shè)置聯(lián)合約束和聯(lián)合索引的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python pexpect ssh 遠(yuǎn)程登錄服務(wù)器的方法
今天小編就為大家分享一篇python pexpect ssh 遠(yuǎn)程登錄服務(wù)器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
python 實(shí)現(xiàn)仿微信聊天時(shí)間格式化顯示的代碼
這篇文章主要介紹了python 實(shí)現(xiàn)仿微信聊天時(shí)間格式化顯示,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-04-04
pytorch+sklearn實(shí)現(xiàn)數(shù)據(jù)加載的流程
這篇文章主要介紹了pytorch+sklearn實(shí)現(xiàn)數(shù)據(jù)加載,之前在訓(xùn)練網(wǎng)絡(luò)的時(shí)候加載數(shù)據(jù)都是稀里糊涂的放進(jìn)去的,也沒有理清楚里面的流程,今天整理一下,加深理解,也方便以后查閱,需要的朋友可以參考下2022-11-11
Python對(duì)象轉(zhuǎn)JSON字符串的方法
這篇文章主要介紹了Python對(duì)象轉(zhuǎn)JSON字符串的方法,涉及Python基于json模塊實(shí)現(xiàn)json轉(zhuǎn)換的實(shí)現(xiàn)技巧,非常簡(jiǎn)便易懂,需要的朋友可以參考下2016-04-04
Python?opencv進(jìn)行圓形識(shí)別(圓檢測(cè))實(shí)例代碼
最近工作的項(xiàng)目上需要檢測(cè)圖像中是否有圓形,下面這篇文章主要給大家介紹了關(guān)于Python?opencv進(jìn)行圓形識(shí)別(圓檢測(cè))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Python數(shù)據(jù)庫編程之pymysql詳解
本文主要介紹了Python數(shù)據(jù)庫編程中pymysql,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
使用Python在Word中插入圖片并文字環(huán)繞的方法
在Word文檔中插入圖片能夠提供更直觀的信息,插入圖片時(shí),我們還可以調(diào)整圖片大小,以及設(shè)置合適的文字環(huán)繞方式,本文將提供兩種使用Python在Word文檔中插入圖片并設(shè)置文字環(huán)繞的方法,需要的朋友可以參考下2024-06-06

