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

Mary-Kate Olsen
發布: 2024-11-14 10:21:01
原創
859 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板