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

