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=
相關文章
- python中f字符串以及其常見用法介紹
- 使用Python?Beautiful?Soup解析HTML內容的方法
- Python異步怎么使用等待有時間限制協程
- Python?Pyperclip模塊怎么安裝和使用
- Python異步之在Asyncio中怎么運行阻塞任務
- Python異步之上下文管理器怎么使用
- Python異步之生成器怎么使用
- Python異步之如何獲取當前和正在運行任務
- Python迭代器如何創建使用
- Python中Matplotlib圖像如何添加標簽
- Python 開發環境
- Python Internet 協議模塊
- Python IP地址
- Python DNS查找
- Python 路由
- Python 自定義HTTP請求
- Python 構建URL
- Python 遠程過程調用
- Python 多處理器
- Python 處理器通信