最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)

 更新時(shí)間:2021年07月21日 08:56:15   作者:小妮淺淺  
在本篇內(nèi)容里小編給大家總結(jié)的是一篇關(guān)于python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。

說(shuō)明

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

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

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

實(shí)例

import asyncio
 
async def func():
print(1)
await asyncio.sleep(2)
print(2)
return "返回值"
 
 
async def main():
print("main開(kāi)始")
 
# 創(chuàng)建協(xié)程,將協(xié)程封裝到Task對(duì)象中并添加到事件循環(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操作時(shí),會(huì)自動(dòng)化切換執(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())

知識(shí)點(diǎn)擴(kuò)展:

Task 概念及用法

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

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

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

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

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

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

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

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

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

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

Task 用法代碼示例:

import asyncio
import arrow


def current_time():
    '''
    獲取當(dāng)前時(shí)間
    :return:
    '''
    cur_time = arrow.now().to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss')
    return cur_time


async def func(sleep_time):
    func_name_suffix = sleep_time        # 使用 sleep_time(函數(shù) I/O 等待時(shí)長(zhǎng))作為函數(shù)名后綴,以區(qū)分任務(wù)對(duì)象
    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é)程的知識(shí)點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)python中Task封裝協(xié)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何用Python實(shí)現(xiàn)感知器算法

    詳解如何用Python實(shí)現(xiàn)感知器算法

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著如何用Python實(shí)現(xiàn)感知器算法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解Python設(shè)計(jì)模式之策略模式

    詳解Python設(shè)計(jì)模式之策略模式

    這篇文章主要介紹了Python設(shè)計(jì)模式之策略模式的相關(guān)知識(shí),文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Python使用Selenium模塊模擬瀏覽器抓取斗魚(yú)直播間信息示例

    Python使用Selenium模塊模擬瀏覽器抓取斗魚(yú)直播間信息示例

    這篇文章主要介紹了Python使用Selenium模塊模擬瀏覽器抓取斗魚(yú)直播間信息,涉及Python基于Selenium模塊的模擬瀏覽器登陸、解析、抓取信息,以及MongoDB數(shù)據(jù)庫(kù)的連接、寫入等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Django rest framework實(shí)現(xiàn)分頁(yè)的示例

    Django rest framework實(shí)現(xiàn)分頁(yè)的示例

    這篇文章主要介紹了Django rest framework實(shí)現(xiàn)分頁(yè)的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)

    python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python mysql斷開(kāi)重連的實(shí)現(xiàn)方法

    python mysql斷開(kāi)重連的實(shí)現(xiàn)方法

    這篇文章主要介紹了python mysql斷開(kāi)重連的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python使用arrow庫(kù)優(yōu)雅地處理時(shí)間數(shù)據(jù)詳解

    Python使用arrow庫(kù)優(yōu)雅地處理時(shí)間數(shù)據(jù)詳解

    雖然Python提供了多個(gè)內(nèi)置模塊用于操作日期時(shí)間,但有的時(shí)候并不能滿足我們的需求,所以下面這篇文章主要給大家介紹了關(guān)于Python使用arrow庫(kù)如何優(yōu)雅地處理時(shí)間數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • 詳談Python2.6和Python3.0中對(duì)除法操作的異同

    詳談Python2.6和Python3.0中對(duì)除法操作的異同

    下面小編就為大家?guī)?lái)一篇詳談Python2.6和Python3.0中對(duì)除法操作的異同。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Python使用xpath實(shí)現(xiàn)圖片爬取

    Python使用xpath實(shí)現(xiàn)圖片爬取

    這篇文章主要介紹了Python使用xpath實(shí)現(xiàn)圖片爬取,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python把圖片轉(zhuǎn)化為pdf代碼實(shí)例

    Python把圖片轉(zhuǎn)化為pdf代碼實(shí)例

    這篇文章主要介紹了Python把圖片轉(zhuǎn)化為pdf代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

临高县| 栾城县| 汨罗市| 如皋市| 京山县| 南雄市| 梓潼县| 新和县| 太仆寺旗| 胶州市| 南汇区| 航空| 元谋县| 梁平县| 含山县| 衡水市| 曲麻莱县| 乐至县| 正阳县| 伽师县| 鄱阳县| 塘沽区| 遂溪县| 清原| 延津县| 乌鲁木齐市| 铁岭市| 资源县| 合江县| 剑川县| 蓝田县| 罗山县| 无棣县| 北海市| 馆陶县| 上杭县| 江北区| 西畴县| 淄博市| 东港市| 焉耆|