欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

正文

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

1. 什么是 Asyncio wait_for()

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

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

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

2. 如何使用 Asyncio wait_for()

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

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

如果提供協(xié)程,則在執(zhí)行 wait_for() 協(xié)程時將其轉(zhuǎn)換為任務(wù)。如果在任務(wù)完成之前超時已過,任務(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:
	# ...

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

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

我們可以探索如何在任務(wù)完成之前等待具有超時的協(xié)程。在此示例中,我們執(zhí)行上述協(xié)程,但調(diào)用方等待 0.2 秒或 200 毫秒的固定超時?;叵胍幌拢幻氲扔?1,000 毫秒。

任務(wù)協(xié)程被修改,使其休眠一秒以上,確保超時總是在任務(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è)置為 0.2 秒。

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

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

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

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

>task got 0.685375224799321
Gave up waiting, task canceled

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

相關(guān)文章

  • 使用python快速在局域網(wǎng)內(nèi)搭建http傳輸文件服務(wù)的方法

    使用python快速在局域網(wǎng)內(nèi)搭建http傳輸文件服務(wù)的方法

    這篇文章主要介紹了使用 python快速在局域網(wǎng)內(nèi)搭建http傳輸文件服務(wù),但是這種方法不要傳輸機(jī)密文件,安全性不高,只用到http協(xié)議沒有使用任何加密協(xié)議,具體實(shí)現(xiàn)方法跟隨小編一起看看吧
    2019-11-11
  • python小程序之飄落的銀杏

    python小程序之飄落的銀杏

    這篇文章主要介紹了利用制作的python小程序-飄落的銀杏,代碼詳細(xì),簡單易懂,有需要練習(xí)python的朋友可以參考下
    2021-04-04
  • 如何基于python對接釘釘并獲取access_token

    如何基于python對接釘釘并獲取access_token

    這篇文章主要介紹了如何基于python對接釘釘并獲取access_token,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Python使用xlrd和xlwt批量讀寫excel文件的示例代碼

    Python使用xlrd和xlwt批量讀寫excel文件的示例代碼

    這篇文章主要介紹了Python使用xlrd和xlwt批量讀寫excel文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • pytorch::Dataloader中的迭代器和生成器應(yīng)用詳解

    pytorch::Dataloader中的迭代器和生成器應(yīng)用詳解

    這篇文章主要介紹了pytorch::Dataloader中的迭代器和生成器應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python 正則表達(dá)式詳解

    Python 正則表達(dá)式詳解

    這篇文章主要介紹了Python中正則表達(dá)式的詳細(xì)教程,正則表達(dá)式是Python學(xué)習(xí)進(jìn)階當(dāng)中的重要內(nèi)容,需要的朋友可以參考下
    2021-10-10
  • django rest framework vue 實(shí)現(xiàn)用戶登錄詳解

    django rest framework vue 實(shí)現(xiàn)用戶登錄詳解

    這篇文章主要介紹了django rest framework vue 實(shí)現(xiàn)用戶登錄詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python OpenCV實(shí)現(xiàn)基于模板的圖像拼接

    Python OpenCV實(shí)現(xiàn)基于模板的圖像拼接

    基于特征點(diǎn)的圖像拼接如果是多張圖,每次計算變換矩陣,都有誤差,最后可以圖像拼完就變形很大,基于模板的方法可以很好的解決這一問題,本文就來和大家具體聊聊
    2022-10-10
  • Scrapy-Redis結(jié)合POST請求獲取數(shù)據(jù)的方法示例

    Scrapy-Redis結(jié)合POST請求獲取數(shù)據(jù)的方法示例

    這篇文章主要給大家介紹了關(guān)于Scrapy-Redis結(jié)合POST請求獲取數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Scrapy-Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python設(shè)計模式之代理模式簡單示例

    Python設(shè)計模式之代理模式簡單示例

    這篇文章主要介紹了Python設(shè)計模式之代理模式,簡單說明了代理模式的概念、原理,并結(jié)合Python實(shí)例形式分析了代理模式的相關(guān)定義與使用技巧,需要的朋友可以參考下
    2018-01-01

最新評論