色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

python中Task封裝協程的知識點總結

瀏覽:28日期:2022-06-14 17:52:10
說明

1、Task是Future的子類,Task是對協程的封裝,我們把多個Task放在循環調度列表中,等待調度執行。

2、Task對象可以跟蹤任務和狀態。Future(Task是Futrue的子類)為我們提供了異步編程中最終結果的處理(Task類還具有狀態處理功能)。

3、把協程封裝成Task,加入一個隊列等待調用。剛創建Task的時候不執行,遇到await就執行。

實例

import asyncio async def func():print(1)await asyncio.sleep(2)print(2)return '返回值' async def main():print('main開始') # 創建協程,將協程封裝到Task對象中并添加到事件循環的任務列表中,等待事件循環去執行(默認是就緒狀態)。# 在調用task_list = [asyncio.create_task(func(), name='n1'),asyncio.create_task(func(), name='n2')] print('main結束') # 當執行某協程遇到IO操作時,會自動化切換執行其他任務。# 此處的await是等待所有協程執行完畢,并將所有協程的返回值保存到done# 如果設置了timeout值,則意味著此處最多等待的秒,完成的協程返回值寫入到done中,未完成則寫到pending中。done, pending = await asyncio.wait(task_list, timeout=None)print(done, pending) asyncio.run(main())

知識點擴展:

Task 概念及用法

Task,是 python 中與事件循環進行交互的一種主要方式。

創建 Task,意思就是把協程封裝成 Task 實例,并追蹤協程的 運行 / 完成狀態,用于未來獲取協程的結果。

Task 核心作用:在事件循環中添加多個并發任務;

具體來說,是通過 asyncio.create_task() 創建 Task,讓協程對象加入時事件循環中,等待被調度執行。

注意:Python 3.7 以后的版本支持 asyncio.create_task(),在此之前的寫法為 loop.create_task(),開發過程中需要注意代碼寫法對不同版本 python 的兼容性。

需要指出的是,協程封裝為 Task 后不會立馬啟動,當某個代碼 await 這個 Task 的時候才會被執行。

當多個 Task 被加入一個 task_list 的時候,添加 Task 的過程中 Task 不會執行,必須要用 await asyncio.wait() 或 await asyncio.gather() 將 Task 對象加入事件循環中異步執行。

一般在開發中,常用的寫法是這樣的:

-- 先創建 task_list 空列表;-- 然后用 asyncio.create_task() 創建 Task;-- 再把 Task 對象加入 task_list;-- 最后使用 await asyncio.wait 或 await asyncio.gather 將 Task 對象加入事件循環中異步執行。

注意:創建 Task 對象時,除了可以使用 asyncio.create_task() 之外,還可以用最低層級的 loop.create_task() 或 asyncio.ensure_future(),他們都可以用來創建 Task 對象,其中關于 ensure_future 相關內容本文接下來會一起講。

Task 用法代碼示例:

import asyncioimport arrowdef current_time(): ’’’ 獲取當前時間 :return: ’’’ cur_time = arrow.now().to(’Asia/Shanghai’).format(’YYYY-MM-DD HH:mm:ss’) return cur_timeasync def func(sleep_time): func_name_suffix = sleep_time# 使用 sleep_time(函數 I/O 等待時長)作為函數名后綴,以區分任務對象 print(f'[{current_time()}] 執行異步函數 {func.__name__}-{func_name_suffix}') await asyncio.sleep(sleep_time) print(f'[{current_time()}] 函數 {func.__name__}-{func_name_suffix} 執行完畢') return f'【[{current_time()}] 得到函數 {func.__name__}-{func_name_suffix} 執行結果】'async def run(): task_list = [] for i in range(5):task = asyncio.create_task(async_func(i))task_list.append(task) done, pending = await asyncio.wait(task_list, timeout=None) for done_task in done:print((f'[{current_time()}] 得到執行結果 {done_task.result()}'))def main(): loop = asyncio.get_event_loop() loop.run_until_complete(run())if __name__ == ’__main__’: main()

到此這篇關于python中Task封裝協程的知識點總結的文章就介紹到這了,更多相關python中Task封裝協程內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python Task Future
相關文章:
主站蜘蛛池模板: 精品三级网站 | 亚洲香蕉一区二区三区在线观看 | 黄色三级视频在线播放 | 黄色天堂 | 成年人在线观看网站 | 亚洲欧美日韩在线线精品 | 免费在线观看a级片 | 久久久久毛片免费观看 | 亚洲综合视频在线观看 | 高级毛片| 成年网站视频在线观看 | 欧美大片一级特黄 | 最新亚洲国产有精品 | 手机看片1024精品日韩 | 国产成人精品无缓存在线播放 | 亚洲免费大全 | 免费人成年短视频在线观看免费网站 | 国产日韩欧美视频在线 | 久久99精品视频在线在线观看 | 99久久精品免费看国产一区二区三区 | 欧美巨大精品欧美一区二区 | 国产视频中文字幕 | 国产成人久久精品 | 国产亚洲视频在线播放大全 | 欧美一区二区三区不卡免费 | 日本免费一区二区三区三州 | 午夜精品久久久久久99热7777 | 毛片手机在线视频免费观看 | 国产v日韩v欧美v精品专区 | 亚洲国产www | 最刺激黄a大片免费观看 | 亚洲国产2017男人a天堂 | 久久精品久久精品久久 | 美女又黄又免费 | 2022日韩理论片在线观看 | 亚洲精品一区二区三区第四页 | 久久精品国产精品亚洲人人 | 亚洲精品91香蕉综合区 | 国产乱子精品免费视观看片 | 久久综合日韩亚洲精品色 | 日日摸天天摸狠狠摸视频 |