首頁  >  文章  >  後端開發  >  如何在 Python 中使用 Async/Await 實現「一勞永逸」?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-14 10:21:01854瀏覽

How Can I Achieve

Python 中的Async/Await「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)

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

以上是如何在 Python 中使用 Async/Await 實現「一勞永逸」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn