精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

Python異步之如何獲取當前和正在運行任務

Python異步之如何獲取當前和正在運行任務

本文講解"Python異步之怎么獲取當前和正在運行任務",希望能夠解決相關問題。

正文

我們可以反省在 asyncio 事件循環中運行的任務。這可以通過為當前運行的任務和所有正在運行的任務獲取一個 asyncio.Task 對象來實現。

1. 如何獲取當前任務

我們可以通過 asyncio.current_task() 函數獲取當前任務。此函數將為當前正在運行的任務返回一個任務對象。

...
# get the current task
task = asyncio.current_task()
  • 傳遞給 asyncio.run() 的主協程。

  • 通過 asyncio.create_task() 在 asyncio 程序中創建和調度的任務。

一個任務可以創建并運行另一個協程(例如,不包含在任務中)。從協程中獲取當前任務將為正在運行的任務返回一個 Task 對象,但不會返回當前正在運行的協程。

如果協程或任務需要有關自身的詳細信息,例如用于日志記錄的任務名稱,則獲取當前任務會很有幫助。

我們可以探索如何為用于啟動 asyncio 程序的主協程獲取 Task 實例。下面的示例定義了一個用作程序入口點的協程。它報告一條消息,然后獲取當前任務并報告其詳細信息。

這是第一個重要的示例,因為它強調所有協程都可以作為異步事件循環中的任務進行訪問。

下面列出了完整的示例。

# SuperFastPython.com
# example of getting the current task from the main coroutine
import asyncio
# define a main coroutine
async def main():
    # report a message
    print('main coroutine started')
    # get the current task
    task = asyncio.current_task()
    # report its details
    print(task)
# start the asyncio program
asyncio.run(main())

運行該示例首先創建主協程并使用它來啟動 asyncio 程序。main() 協程運行并首先報告一條消息。

然后它檢索當前任務,這是一個代表自身的任務對象,即當前正在運行的協程。然后它會報告當前正在運行的任務的詳細信息。

我們可以看到該任務具有第一個任務的默認名稱“Task-1”,并且正在執行 main() 協程,即當前正在運行的協程。

這突出表明我們可以使用 asyncio.current_task() 函數來訪問當前正在運行的協程的任務對象,該對象自動包裝在任務對象中。

main coroutine started
<task?pending?name='task-1'?coro=                
相關文章