91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python異步怎么使用等待有時間限制協程

發布時間:2023-05-12 14:17:16 來源:億速云 閱讀:101 作者:zzz 欄目:開發技術

本文小編為大家詳細介紹“Python異步怎么使用等待有時間限制協程”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python異步怎么使用等待有時間限制協程”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

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

1. 什么是 Asyncio wait_for()

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

這允許調用者既可以設置他們愿意等待任務完成的時間,又可以通過在超時結束時取消任務來強制執行超時。

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

2. 如何使用 Asyncio wait_for()

asyncio.wait_for() 函數接受一個等待和超時。等待對象可能是協程或任務。必須指定超時,并且可以是無超時、整數或浮點秒數。wait_for() 函數返回一個協程,該協程在明確等待或作為任務調度之前不會執行。

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

如果提供協程,則在執行 wait_for() 協程時將其轉換為任務。如果在任務完成之前超時已過,任務將被取消,并引發 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:
	# ...

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

...
# 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:
	# ...

接下來,讓我們看看如何在超時時調用 wait_for()。

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

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

任務協程被修改,使其休眠一秒以上,確保超時總是在任務完成之前到期。

# 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())

運行示例首先創建 main() 協程并將其用作 asyncio 程序的入口點。main() 協程創建任務協程。然后它調用 wait_for() 并傳遞任務協程并將超時設置為 0.2 秒。

main()協程被掛起,執行task_coro()。它報告一條消息并休眠片刻。main() 協程在超時結束后恢復。 wait_for()協程取消task_coro()協程,main()協程掛起。

task_coro() 再次運行并響應要終止的請求。它引發 TimeoutError 異常并終止。main() 協程恢復并處理由 task_coro() 引發的 TimeoutError。

這突出顯示了我們如何調用帶超時的 wait_for() 函數,并在任務未在超時內完成時取消任務。

由于使用了隨機數,程序每次運行時的輸出都會不同。

>task got 0.685375224799321
Gave up waiting, task canceled

讀到這里,這篇“Python異步怎么使用等待有時間限制協程”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潢川县| 休宁县| 云林县| 华池县| 洛南县| 大关县| 英山县| 姜堰市| 灵璧县| 夏河县| 青阳县| 乐东| 天峨县| 盐城市| 嘉义市| 湖北省| 开阳县| 肇东市| 德江县| 兰溪市| 台北县| 南开区| 滨州市| 罗定市| 邓州市| 来安县| 六安市| 汝城县| 武鸣县| 宜都市| 吉林省| 双江| 陆丰市| 青浦区| 安康市| 宁南县| 桐柏县| 读书| 同仁县| 晋江市| 岑巩县|