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

Python?異步等待任務(wù)集合

 更新時(shí)間:2023年03月22日 14:01:55   作者:冷凍工廠  
這篇文章主要為大家介紹了Python?異步等待任務(wù)集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

我們可以通過 asyncio.wait() 函數(shù)等待異步任務(wù)完成??梢缘却煌臈l件,例如所有任務(wù)完成、第一個(gè)任務(wù)完成以及第一個(gè)任務(wù)因異常而失敗。

讓我們仔細(xì)看看。

1. 什么是 asyncio.wait()

asyncio.wait() 函數(shù)可用于等待一組異步任務(wù)完成?;叵胍幌拢琣syncio 任務(wù)是包裝協(xié)程的 asyncio.Task 類的一個(gè)實(shí)例。它允許獨(dú)立調(diào)度和執(zhí)行協(xié)程,Task 實(shí)例提供任務(wù)句柄以查詢狀態(tài)和獲取結(jié)果。

wait() 函數(shù)允許我們等待一組任務(wù)完成。等待調(diào)用可以配置為等待不同的條件,例如所有任務(wù)完成、第一個(gè)任務(wù)完成以及第一個(gè)任務(wù)因錯(cuò)誤而失敗。

接下來,讓我們看看如何使用 wait() 函數(shù)。

2. 如何使用 asyncio.wait()

asyncio.wait() 函數(shù)采用可等待對象的集合,通常是 Task 對象。

這可以是我們創(chuàng)建的列表、字典或任務(wù)對象集,例如通過在列表理解中調(diào)用 asyncio.create_task() 函數(shù)。

...
# create many tasks
tasks = [asyncio.create_task(task_coro(i)) for i in range(10)]

asyncio.wait() 在滿足任務(wù)集合的某些條件之前不會返回。默認(rèn)情況下,條件是所有任務(wù)都已完成。

wait() 函數(shù)返回兩個(gè)集合的元組。第一個(gè)集合包含所有滿足條件的任務(wù)對象,第二個(gè)集合包含所有其他尚未滿足條件的任務(wù)對象。

這些集被稱為“完成”集和“待定”集。

...
# wait for all tasks to complete
done, pending = await asyncio.wait(tasks)

從技術(shù)上講,asyncio.wait() 是一個(gè)返回協(xié)程的協(xié)程函數(shù)。然后我們可以等待這個(gè)協(xié)程,它將返回集合的元組。

...
# create the wait coroutine
wait_coro = asyncio.wait(tasks)
# await the wait coroutine
tuple = await wait_coro

等待的條件可以由默認(rèn)設(shè)置為 asyncio.ALL_COMPLETED 的“return_when”參數(shù)指定。

...
# wait for all tasks to complete
done, pending = await asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED)

我們可以通過將 return_when 設(shè)置為 FIRST_COMPLETED 來等待第一個(gè)任務(wù)完成

...
# wait for the first task to be completed
done, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)

當(dāng)?shù)谝粋€(gè)任務(wù)完成并在完成集中返回時(shí),其余任務(wù)不會被取消并繼續(xù)并發(fā)執(zhí)行。

我們可以通過將 return_when 設(shè)置為 FIRST_EXCEPTION 來等待第一個(gè)任務(wù)因異常而失敗。

...
# wait for the first task to fail
done, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)

在這種情況下,完成集將包含第一個(gè)因異常而失敗的任務(wù)。如果沒有任務(wù)因異常而失敗,則完成集將包含所有任務(wù),只有在所有任務(wù)完成后 wait() 才會返回。

我們可以通過以秒為單位的“超時(shí)”參數(shù)指定我們愿意等待給定條件的時(shí)間。

如果在滿足條件之前超時(shí)到期,則返回任務(wù)元組以及當(dāng)時(shí)滿足條件的任何任務(wù)子集,例如如果等待所有任務(wù)完成,則完成的任務(wù)子集。

...
# wait for all tasks to complete with a timeout
done, pending = await asyncio.wait(tasks, timeout=3)

如果在滿足條件之前達(dá)到超時(shí),則不會引發(fā)異常并且不會取消剩余任務(wù)。

現(xiàn)在我們知道如何使用 asyncio.wait() 函數(shù),讓我們看一些有效的例子。

3. 等待所有任務(wù)的示例

我們可以探索如何使用 asyncio.wait() 等待所有任務(wù)。在這個(gè)例子中,我們將定義一個(gè)簡單的任務(wù)協(xié)程,它生成一個(gè)隨機(jī)值,休眠幾分之一秒,然后用生成的值報(bào)告一條消息。

然后,主協(xié)程將與協(xié)程一起在列表理解中創(chuàng)建許多任務(wù),然后等待所有任務(wù)完成。

# SuperFastPython.com
# example of waiting for all tasks to complete
from random import random
import asyncio
# coroutine to execute in a new task
async def task_coro(arg):
    # generate a random value between 0 and 1
    value = random()
    # block for a moment
    await asyncio.sleep(value)
    # report the value
    print(f'>task {arg} done with {value}')
# main coroutine
async def main():
    # create many tasks
    tasks = [asyncio.create_task(task_coro(i)) for i in range(10)]
    # wait for all tasks to complete
    done,pending = await asyncio.wait(tasks)
    # report results
    print('All done')
# start the asyncio program
asyncio.run(main())

運(yùn)行示例首先創(chuàng)建 main() 協(xié)程并將其用作 asyncio 程序的入口點(diǎn)。

然后 main() 協(xié)程在列表理解中創(chuàng)建一個(gè)包含十個(gè)任務(wù)的列表,每個(gè)任務(wù)提供一個(gè)從 0 到 9 的唯一整數(shù)參數(shù)。

然后 main() 協(xié)程被掛起并等待所有任務(wù)完成。任務(wù)執(zhí)行。每個(gè)生成一個(gè)隨機(jī)值,休眠片刻,然后報(bào)告其生成的值。

所有任務(wù)完成后,main() 協(xié)程恢復(fù)并報(bào)告最終消息。這個(gè)例子強(qiáng)調(diào)了我們?nèi)绾问褂?wait() 函數(shù)來等待一組任務(wù)完成。

這可能是該函數(shù)最常見的用法。請注意,由于使用了隨機(jī)數(shù),每次運(yùn)行程序時(shí)結(jié)果都會不同。

>task 5 done with 0.0591009105682192
>task 8 done with 0.10453715687017351
>task 0 done with 0.15462838864295925
>task 6 done with 0.4103492027393125
>task 9 done with 0.45567100006991623
>task 2 done with 0.6984682905809402
>task 7 done with 0.7785363531316224
>task 3 done with 0.827386088873161
>task 4 done with 0.9481344994700972
>task 1 done with 0.9577302665040541
All done

以上就是Python 異步等待任務(wù)集合的詳細(xì)內(nèi)容,更多關(guān)于Python 異步等待任務(wù)集合的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python爬蟲入門教程--正則表達(dá)式完全指南(五)

    python爬蟲入門教程--正則表達(dá)式完全指南(五)

    要想做爬蟲,不可避免的要用到正則表達(dá)式,如果是簡單的字符串處理,類似于split,substring等等就足夠了,可是涉及到比較復(fù)雜的匹配,當(dāng)然是正則的天下,下面這篇文章主要給大家介紹了python爬蟲之正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下。
    2017-05-05
  • scrapy爬蟲遇到j(luò)s動(dòng)態(tài)渲染問題

    scrapy爬蟲遇到j(luò)s動(dòng)態(tài)渲染問題

    本文主要介紹了scrapy爬蟲遇到j(luò)s動(dòng)態(tài)渲染問題,通過js渲染出來的動(dòng)態(tài)網(wǎng)頁的內(nèi)容與網(wǎng)頁文件內(nèi)容是不一樣的,本文就來解決一下這些問題,感興趣的可以了解一下
    2022-05-05
  • 使用Python繪制詞云圖的詳細(xì)教程

    使用Python繪制詞云圖的詳細(xì)教程

    詞云(Word Cloud)是一種數(shù)據(jù)可視化技術(shù),用于顯示文本數(shù)據(jù)中的頻繁單詞,在本教程中,我們將使用 Python 的 wordcloud 庫,結(jié)合 matplotlib 和 jieba 等工具,展示如何從文本數(shù)據(jù)生成詞云圖,需要的朋友可以參考下
    2025-01-01
  • Python實(shí)現(xiàn)的簡單排列組合算法示例

    Python實(shí)現(xiàn)的簡單排列組合算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的簡單排列組合算法,涉及Python使用itertools庫進(jìn)行排列組合運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python 獲取windows桌面路徑的5種方法小結(jié)

    Python 獲取windows桌面路徑的5種方法小結(jié)

    今天小編就為大家分享一篇Python 獲取windows桌面路徑的5種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python實(shí)現(xiàn)一個(gè)簡單的web應(yīng)用框架

    python實(shí)現(xiàn)一個(gè)簡單的web應(yīng)用框架

    這篇文章主要為大家介紹了使用python寫一個(gè)簡單的web應(yīng)用框架實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • python爬蟲中url管理器去重操作實(shí)例

    python爬蟲中url管理器去重操作實(shí)例

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python爬蟲中url管理器去重操作實(shí)例,有需要的朋友們可以參考下。
    2020-11-11
  • Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享

    Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享

    這篇文章主要介紹了Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • Python實(shí)現(xiàn)Singleton模式的方式詳解

    Python實(shí)現(xiàn)Singleton模式的方式詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)Singleton模式的方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 詳解Django CAS 解決方案

    詳解Django CAS 解決方案

    這篇文章主要介紹了詳解Django CAS 解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論

门头沟区| 西城区| 讷河市| 望谟县| 靖远县| 墨玉县| 应用必备| 原平市| 怀柔区| 镇巴县| 临沧市| 布尔津县| 茌平县| 宁安市| 高雄市| 河源市| 庆元县| 阿合奇县| 色达县| 兰溪市| 密山市| 兴海县| 揭西县| 乌拉特前旗| 彰化市| 修武县| 鄯善县| 蓬莱市| 隆尧县| 神农架林区| 万安县| 仁怀市| 论坛| 刚察县| 德保县| 台中市| 平和县| 牙克石市| 株洲市| 城口县| 康乐县|