69pao国产精品视频-久久精品一区二区二三区-精品国产精品亚洲一本大道-99国产综合一区久久

Python異步之如何獲取當(dāng)前和正在運行任務(wù)

Python異步之如何獲取當(dāng)前和正在運行任務(wù)

本文講解"Python異步之怎么獲取當(dāng)前和正在運行任務(wù)",希望能夠解決相關(guān)問題。

正文

我們可以反省在 asyncio 事件循環(huán)中運行的任務(wù)。這可以通過為當(dāng)前運行的任務(wù)和所有正在運行的任務(wù)獲取一個 asyncio.Task 對象來實現(xiàn)。

1. 如何獲取當(dāng)前任務(wù)

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

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

  • 通過 asyncio.create_task() 在 asyncio 程序中創(chuàng)建和調(diào)度的任務(wù)。

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

如果協(xié)程或任務(wù)需要有關(guān)自身的詳細(xì)信息,例如用于日志記錄的任務(wù)名稱,則獲取當(dāng)前任務(wù)會很有幫助。

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

這是第一個重要的示例,因為它強(qiáng)調(diào)所有協(xié)程都可以作為異步事件循環(huán)中的任務(wù)進(jìn)行訪問。

下面列出了完整的示例。

# 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())

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

然后它檢索當(dāng)前任務(wù),這是一個代表自身的任務(wù)對象,即當(dāng)前正在運行的協(xié)程。然后它會報告當(dāng)前正在運行的任務(wù)的詳細(xì)信息。

我們可以看到該任務(wù)具有第一個任務(wù)的默認(rèn)名稱“Task-1”,并且正在執(zhí)行 main() 協(xié)程,即當(dāng)前正在運行的協(xié)程。

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

main coroutine started
<task?pending?name='task-1'?coro=                
相關(guān)文章