asyncio異步編程之Task對(duì)象詳解
1.Task對(duì)象的作用
可以將多個(gè)任務(wù)添加到事件循環(huán)當(dāng)中,達(dá)到多任務(wù)并發(fā)的效果
2.如何創(chuàng)建task對(duì)象
asyncio.create_task(協(xié)程對(duì)象)
注意:create_task只有在python3.7及以后的版本中才可以使用,就像asyncio.run()一樣,
在3.7以前可以使用asyncio.ensure_future()方式創(chuàng)建task對(duì)象
3.示例一(目前不推薦這種寫(xiě)法)
async def func():
print(1)
await asyncio.sleep(2)
print(2)
return "test"
async def main():
print("main start")
# python 3.7及以上版本的寫(xiě)法
# task1 = asyncio.create_task(func())
# task2 = asyncio.create_task(func())
# python3.7以前的寫(xiě)法
task1 = asyncio.ensure_future(func())
task2 = asyncio.ensure_future(func())
print("main end")
ret1 = await task1
ret2 = await task2
print(ret1, ret2)
# python3.7以后的寫(xiě)法
# asyncio.run(main())
# python3.7以前的寫(xiě)法
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
"""
在創(chuàng)建task的時(shí)候,就將創(chuàng)建好的task添加到了時(shí)間循環(huán)當(dāng)中,所以說(shuō)必須得有時(shí)間循環(huán),才可以創(chuàng)建task,否則會(huì)報(bào)錯(cuò)
"""4.示例2
async def func1():
print(1111)
await asyncio.sleep(2)
print(2222)
return "test"
async def main1():
print("main start")
tasks = [
asyncio.ensure_future(func1()),
asyncio.ensure_future(func1())
]
print("main end")
# 執(zhí)行成功后結(jié)果在done中, wait中可以加第二個(gè)參數(shù)timeout,如果在超時(shí)時(shí)間內(nèi)沒(méi)有完成,那么pending就是未執(zhí)行完的東西
done, pending = await asyncio.wait(tasks, timeout=1)
print(done)
#print(pending)
# python3.7以前的寫(xiě)法
loop = asyncio.get_event_loop()
loop.run_until_complete(main1())5.示例3(算是以上示例2的簡(jiǎn)化版)
"""
方式二的簡(jiǎn)化版,就是tasks中不直接添加task,而是先將協(xié)程對(duì)象加入到list中,在最后運(yùn)行中添加
"""
async def func2():
print(1111)
await asyncio.sleep(2)
print(2222)
return "test"
tasks = [
func2(),
func2()
]
# python3.7以前的寫(xiě)法
loop = asyncio.get_event_loop()
done, pending = loop.run_until_complete(asyncio.wait(tasks))
print(done)
print(pending)總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python數(shù)據(jù)處理中pd.concat與pd.merge的區(qū)別及說(shuō)明
這篇文章主要介紹了Python數(shù)據(jù)處理中pd.concat與pd.merge的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Python PyWebIO實(shí)現(xiàn)網(wǎng)頁(yè)版數(shù)據(jù)查詢(xún)器
PyWebIO提供了一系列命令式的交互函數(shù)來(lái)在瀏覽器上獲取用戶輸入和進(jìn)行輸出,將瀏覽器變成了一個(gè)“富文本終端”,可以用于構(gòu)建簡(jiǎn)單的Web應(yīng)用或基于瀏覽器的GUI應(yīng)用。本文將利用PyWebIO制作一個(gè)網(wǎng)頁(yè)版的數(shù)據(jù)查詢(xún)器,感興趣的可以學(xué)習(xí)一下2021-12-12
TF-IDF的算法原理以及Python實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了TF-IDF的算法原理以及Python實(shí)現(xiàn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2018-01-01
Python實(shí)現(xiàn)讀寫(xiě)sqlite3數(shù)據(jù)庫(kù)并將統(tǒng)計(jì)數(shù)據(jù)寫(xiě)入Excel的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)讀寫(xiě)sqlite3數(shù)據(jù)庫(kù)并將統(tǒng)計(jì)數(shù)據(jù)寫(xiě)入Excel的方法,涉及Python針對(duì)sqlite3數(shù)據(jù)庫(kù)的讀取及Excel文件相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
全CPU并行處理Pandas操作Pandarallel更快處理數(shù)據(jù)
我們?cè)谔幚頂?shù)據(jù)時(shí),通常小的數(shù)據(jù)對(duì)處理速度不敏感,但數(shù)據(jù)量一大,頓時(shí)會(huì)感覺(jué)數(shù)據(jù)處理效率不盡如人意,今天介紹的pandarallel就是一個(gè)簡(jiǎn)單高效的Pandas并行工具,幾行代碼就可以提高數(shù)據(jù)處理效率,2024-01-01
Python+PyQt6編寫(xiě)一個(gè)圖片播放器
這篇文章主要為大家詳細(xì)介紹了Python如何結(jié)合PyQt6編寫(xiě)一個(gè)圖片播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下2025-02-02
selenium與xpath之獲取指定位置的元素的實(shí)現(xiàn)
這篇文章主要介紹了selenium與xpath之獲取指定位置的元素的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python實(shí)現(xiàn)字典(dict)的迭代操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)字典(dict)的迭代操作,結(jié)合實(shí)例形式分析了Python針對(duì)字典鍵、值以及鍵值對(duì)等迭代操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06
Python?ORM數(shù)據(jù)庫(kù)框架Sqlalchemy的使用教程詳解
對(duì)象關(guān)系映射(Object?Relational?Mapping,簡(jiǎn)稱(chēng)ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。本文主要介紹了其使用的相關(guān)資料,感興趣的小伙伴可以學(xué)習(xí)一下2022-10-10
Python多線程實(shí)現(xiàn)支付模擬請(qǐng)求過(guò)程解析
這篇文章主要介紹了python多線程實(shí)現(xiàn)支付模擬請(qǐng)求過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

