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