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

Python?異步如何使用等待有時(shí)間限制協(xié)程

 更新時(shí)間:2023年03月22日 11:56:27   作者:冷凍工廠  
這篇文章主要為大家介紹了Python?異步如何使用等待有時(shí)間限制協(xié)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

我們可以使用 asyncio.wait_for() 函數(shù)等待 asyncio 任務(wù)或協(xié)程超時(shí)完成。如果在任務(wù)完成之前超時(shí)已過,任務(wù)將被取消。

1. 什么是 Asyncio wait_for()

asyncio.wait_for() 函數(shù)允許調(diào)用者等待 asyncio 任務(wù)或協(xié)程超時(shí)完成。如果沒有指定超時(shí),wait_for() 函數(shù)將等待直到任務(wù)完成。如果在任務(wù)完成之前指定了超時(shí)并超時(shí),那么任務(wù)將被取消。

這允許調(diào)用者既可以設(shè)置他們?cè)敢獾却蝿?wù)完成的時(shí)間,又可以通過在超時(shí)結(jié)束時(shí)取消任務(wù)來強(qiáng)制執(zhí)行超時(shí)。

現(xiàn)在我們知道了 asyncio.wait_for() 函數(shù)是什么,讓我們看看如何使用它。

2. 如何使用 Asyncio wait_for()

asyncio.wait_for() 函數(shù)接受一個(gè)等待和超時(shí)。等待對(duì)象可能是協(xié)程或任務(wù)。必須指定超時(shí),并且可以是無超時(shí)、整數(shù)或浮點(diǎn)秒數(shù)。wait_for() 函數(shù)返回一個(gè)協(xié)程,該協(xié)程在明確等待或作為任務(wù)調(diào)度之前不會(huì)執(zhí)行。

...
# wait for a task to complete
await asyncio.wait_for(coro, timeout=10)

如果提供協(xié)程,則在執(zhí)行 wait_for() 協(xié)程時(shí)將其轉(zhuǎn)換為任務(wù)。如果在任務(wù)完成之前超時(shí)已過,任務(wù)將被取消,并引發(fā) asyncio.TimeoutError,這可能需要處理。

...
# execute a task with a timeout
try:
	# wait for a task to complete
	await asyncio.wait_for(coro, timeout=1)
except asyncio.TimeoutError:
	# ...

如果等待的任務(wù)因未處理的異常而失敗,則該異常將傳播回等待 wait_for() 協(xié)程的調(diào)用者,在這種情況下可能需要處理它。

...
# execute a task that may fail
try:
	# wait for a task to complete
	await asyncio.wait_for(coro, timeout=1)
except asyncio.TimeoutError:
	# ...
except Exception:
	# ...

接下來,讓我們看看如何在超時(shí)時(shí)調(diào)用 wait_for()。

3. 帶有超時(shí)的 Asyncio wait_for() 示例

我們可以探索如何在任務(wù)完成之前等待具有超時(shí)的協(xié)程。在此示例中,我們執(zhí)行上述協(xié)程,但調(diào)用方等待 0.2 秒或 200 毫秒的固定超時(shí)。回想一下,一秒等于 1,000 毫秒。

任務(wù)協(xié)程被修改,使其休眠一秒以上,確保超時(shí)總是在任務(wù)完成之前到期。

# SuperFastPython.com
# example of waiting for a coroutine with a timeout
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 = 1 + random()
    # report message
    print(f'>task got {value}')
    # block for a moment
    await asyncio.sleep(value)
    # report all done
    print('>task done')
# main coroutine
async def main():
    # create a task
    task = task_coro(1)
    # execute and wait for the task without a timeout
    try:
        await asyncio.wait_for(task, timeout=0.2)
    except asyncio.TimeoutError:
        print('Gave up waiting, task canceled')
# start the asyncio program
asyncio.run(main())

運(yùn)行示例首先創(chuàng)建 main() 協(xié)程并將其用作 asyncio 程序的入口點(diǎn)。main() 協(xié)程創(chuàng)建任務(wù)協(xié)程。然后它調(diào)用 wait_for() 并傳遞任務(wù)協(xié)程并將超時(shí)設(shè)置為 0.2 秒。

main()協(xié)程被掛起,執(zhí)行task_coro()。它報(bào)告一條消息并休眠片刻。main() 協(xié)程在超時(shí)結(jié)束后恢復(fù)。 wait_for()協(xié)程取消task_coro()協(xié)程,main()協(xié)程掛起。

task_coro() 再次運(yùn)行并響應(yīng)要終止的請(qǐng)求。它引發(fā) TimeoutError 異常并終止。main() 協(xié)程恢復(fù)并處理由 task_coro() 引發(fā)的 TimeoutError。

這突出顯示了我們?nèi)绾握{(diào)用帶超時(shí)的 wait_for() 函數(shù),并在任務(wù)未在超時(shí)內(nèi)完成時(shí)取消任務(wù)。

由于使用了隨機(jī)數(shù),程序每次運(yùn)行時(shí)的輸出都會(huì)不同。

>task got 0.685375224799321
Gave up waiting, task canceled

以上就是Python 異步如何使用等待有時(shí)間限制協(xié)程的詳細(xì)內(nèi)容,更多關(guān)于Python 異步時(shí)間限制協(xié)程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Python如何實(shí)現(xiàn)尾遞歸優(yōu)化

    詳解Python如何實(shí)現(xiàn)尾遞歸優(yōu)化

    尾遞歸是函數(shù)返回最后一個(gè)操作是遞歸調(diào)用,則該函數(shù)是尾遞歸。本文將介紹Python是如何實(shí)現(xiàn)尾遞歸優(yōu)化的,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • pip安裝python庫(kù)的方法總結(jié)

    pip安裝python庫(kù)的方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于使用pip安裝python庫(kù)的幾種常用方法,有需要的朋友們可以參考下。
    2019-08-08
  • Python format()格式化輸出方法

    Python format()格式化輸出方法

    這篇文章主要介紹了Python format()格式化輸出方法, Python 2.6以后,Python 中的就提供了字符串類型(str)提供了 format() 方法對(duì)字符串進(jìn)行格式化,夏敏我們就來了解這個(gè)方法吧,需要的小伙伴也可以參考一下

    2021-12-12
  • Django1.3添加app提示模塊不存在的解決方法

    Django1.3添加app提示模塊不存在的解決方法

    這篇文章主要介紹了Django1.3添加app提示模塊不存在的解決方法,原因是新版和舊版的APP名稱寫法問題,需要的朋友可以參考下
    2014-08-08
  • Python如何實(shí)現(xiàn)伽馬矯正

    Python如何實(shí)現(xiàn)伽馬矯正

    這篇文章主要介紹了Python如何實(shí)現(xiàn)伽馬矯正問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Python實(shí)現(xiàn)模擬分割大文件及多線程處理的方法

    Python實(shí)現(xiàn)模擬分割大文件及多線程處理的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)模擬分割大文件及多線程處理的方法,涉及Python文件讀取、分割及多線程相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • 一文速學(xué)Python+Pyecharts繪制樹形圖

    一文速學(xué)Python+Pyecharts繪制樹形圖

    比起matplotlib,pyeacharts的圖表要豐富而且好看,而且pyechart文檔全,便于開發(fā)和閱讀文檔,熟練掌握后是一種非常好用的數(shù)據(jù)可視化的工具之一。本文就來用Pyecharts繪制樹形圖,快跟隨小編一起學(xué)習(xí)一下吧
    2023-02-02
  • Python處理文本文件中控制字符的方法

    Python處理文本文件中控制字符的方法

    最近在使用Python的時(shí)候遇到過文檔中出現(xiàn)控制字符報(bào)錯(cuò)的問題。想著總結(jié)一下,方便以后需要或這同樣遇到問題的朋友,下面這篇文章主要介紹了Python處理文本文件中控制字符的解決方法,需要的朋友可以參考借鑒。
    2017-02-02
  • python爬蟲之利用selenium模塊自動(dòng)登錄CSDN

    python爬蟲之利用selenium模塊自動(dòng)登錄CSDN

    這篇文章主要介紹了python爬蟲之利用selenium模塊自動(dòng)登錄CSDN,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • 使用python獲取電腦的磁盤信息方法

    使用python獲取電腦的磁盤信息方法

    今天小編就為大家分享一篇使用python獲取電腦的磁盤信息方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評(píng)論

巫溪县| 嘉兴市| 华坪县| 淮北市| 峨山| 会宁县| 鄂托克前旗| 台北市| 斗六市| 桓台县| 伊通| 桂林市| 皮山县| 古交市| 咸丰县| 顺平县| 天镇县| 安远县| 嘉黎县| 定安县| 湟中县| 夹江县| 大城县| 韶山市| 恩平市| 靖西县| 张家界市| 琼海市| 西昌市| 襄城县| 邢台县| 梓潼县| 防城港市| 黔西| 洛浦县| 方正县| 禄劝| 平凉市| 新郑市| 恩施市| 长顺县|