」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Python 中使用 Async/Await 實現「一勞永逸」?

如何在 Python 中使用 Async/Await 實現「一勞永逸」?

發佈於2024-11-21
瀏覽:942

How Can I Achieve

Async/Await Python 中的「Fire and Forget」

問題陳述

Async/await 為Python 中的非同步程式設計提供了便利的文法.但是,在某些情況下,我們希望啟動非同步操作而不等待其完成。這通常被稱為“一勞永逸”。

使用 asyncio.Task 的解決方案

Python 提供了 asyncio.Task,它允許我們創建一個在後台執行的任務。使用 asyncio.Task,我們可以透過在腳本中加入以下程式碼來實現「即發即忘」:

import asyncio

async def async_foo():
    # Do some asynchronous stuff here

# Create a task for async_foo()
asyncio.ensure_future(async_foo())

這為 async_foo() 建立一個任務,該任務將非同步執行而不會阻塞主執行緒。

處理待處理任務

如果我們的腳本在所有任務完成之前完成,我們可以使用以下程式碼來等待所有待處理的任務:

pending_tasks = asyncio.Task.all_tasks()
loop.run_until_complete(asyncio.gather(*pending_tasks))

這確保所有任務在腳本退出之前完成,防止任何警告或錯誤。

取消任務

在某些情況下,我們可能不想等待任務完成。我們可以使用下面的程式碼取消它們:

for task in pending_tasks:
    task.cancel()
    with suppress(asyncio.CancelledError):
        loop.run_until_complete(task)

這將取消任務並抑制因取消而可能引發的任何錯誤。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3