av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

python中Task封裝協(xié)程的知識點總結(jié)

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

1、Task是Future的子類,Task是對協(xié)程的封裝,我們把多個Task放在循環(huán)調(diào)度列表中,等待調(diào)度執(zhí)行。

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

3、把協(xié)程封裝成Task,加入一個隊列等待調(diào)用。剛創(chuàng)建Task的時候不執(zhí)行,遇到await就執(zhí)行。

實例

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

知識點擴(kuò)展:

Task 概念及用法

Task,是 python 中與事件循環(huán)進(jìn)行交互的一種主要方式。

創(chuàng)建 Task,意思就是把協(xié)程封裝成 Task 實例,并追蹤協(xié)程的 運行 / 完成狀態(tài),用于未來獲取協(xié)程的結(jié)果。

Task 核心作用:在事件循環(huán)中添加多個并發(fā)任務(wù);

具體來說,是通過 asyncio.create_task() 創(chuàng)建 Task,讓協(xié)程對象加入時事件循環(huán)中,等待被調(diào)度執(zhí)行。

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

需要指出的是,協(xié)程封裝為 Task 后不會立馬啟動,當(dāng)某個代碼 await 這個 Task 的時候才會被執(zhí)行。

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

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

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

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

Task 用法代碼示例:

import asyncioimport arrowdef current_time(): ’’’ 獲取當(dāng)前時間 :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(函數(shù) I/O 等待時長)作為函數(shù)名后綴,以區(qū)分任務(wù)對象 print(f'[{current_time()}] 執(zhí)行異步函數(shù) {func.__name__}-{func_name_suffix}') await asyncio.sleep(sleep_time) print(f'[{current_time()}] 函數(shù) {func.__name__}-{func_name_suffix} 執(zhí)行完畢') return f'【[{current_time()}] 得到函數(shù) {func.__name__}-{func_name_suffix} 執(zhí)行結(jié)果】'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()}] 得到執(zhí)行結(jié)果 {done_task.result()}'))def main(): loop = asyncio.get_event_loop() loop.run_until_complete(run())if __name__ == ’__main__’: main()

到此這篇關(guān)于python中Task封裝協(xié)程的知識點總結(jié)的文章就介紹到這了,更多相關(guān)python中Task封裝協(xié)程內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: python Task Future
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品在线播放 | 欧美三级久久久 | 成人免费av在线 | 日韩在线精品强乱中文字幕 | 欧美国产日韩一区二区三区 | 亚洲一区综合 | 国产精品久久久久久久免费观看 | 国产精品久久久久久久久久免费看 | 中文字幕韩在线第一页 | 在线观看免费av网 | 91免费在线看 | 日韩精品免费在线观看 | 久久99这里只有精品 | 久久在线 | 久久久久亚洲精品国产 | 精品视频亚洲 | 日韩精品无码一区二区三区 | 日韩欧美国产一区二区 | 国产精品久久久久久吹潮日韩动画 | av电影手机在线看 | 日日人人 | 日韩久久中文字幕 | 欧美v在线观看 | 欧美 日韩精品 | 中文字幕日韩av | 国产精品成av人在线视午夜片 | 欧美1区2区 | 91精品国产91 | 天天爱天天操 | 一级毛片视频 | 91视频一区 | 精品99久久久久久 | 国产精品1区2区 | 久久只有精品 | 欧美精品一区二区三区四区 | 日本精品国产 | 国产中文字幕av | 亚洲欧洲中文日韩 | 欧美日韩国产一区二区三区 | 91精品国产综合久久久久久漫画 | 日韩精品一区在线 |