Python異步之如何獲取當(dāng)前和正在運(yùn)行任務(wù)
本文講解"Python異步之怎么獲取當(dāng)前和正在運(yùn)行任務(wù)",希望能夠解決相關(guān)問題。
正文
我們可以反省在 asyncio 事件循環(huán)中運(yùn)行的任務(wù)。這可以通過為當(dāng)前運(yùn)行的任務(wù)和所有正在運(yùn)行的任務(wù)獲取一個(gè) asyncio.Task 對(duì)象來實(shí)現(xiàn)。
1. 如何獲取當(dāng)前任務(wù)
我們可以通過 asyncio.current_task() 函數(shù)獲取當(dāng)前任務(wù)。此函數(shù)將為當(dāng)前正在運(yùn)行的任務(wù)返回一個(gè)任務(wù)對(duì)象。
... # get the current task task = asyncio.current_task()
- 傳遞給 asyncio.run() 的主協(xié)程。
- 通過 asyncio.create_task() 在 asyncio 程序中創(chuàng)建和調(diào)度的任務(wù)。
一個(gè)任務(wù)可以創(chuàng)建并運(yùn)行另一個(gè)協(xié)程(例如,不包含在任務(wù)中)。從協(xié)程中獲取當(dāng)前任務(wù)將為正在運(yùn)行的任務(wù)返回一個(gè) Task 對(duì)象,但不會(huì)返回當(dāng)前正在運(yùn)行的協(xié)程。
如果協(xié)程或任務(wù)需要有關(guān)自身的詳細(xì)信息,例如用于日志記錄的任務(wù)名稱,則獲取當(dāng)前任務(wù)會(huì)很有幫助。
我們可以探索如何為用于啟動(dòng) asyncio 程序的主協(xié)程獲取 Task 實(shí)例。下面的示例定義了一個(gè)用作程序入口點(diǎn)的協(xié)程。它報(bào)告一條消息,然后獲取當(dāng)前任務(wù)并報(bào)告其詳細(xì)信息。
這是第一個(gè)重要的示例,因?yàn)樗鼜?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())
運(yùn)行該示例首先創(chuàng)建主協(xié)程并使用它來啟動(dòng) asyncio 程序。main() 協(xié)程運(yùn)行并首先報(bào)告一條消息。
然后它檢索當(dāng)前任務(wù),這是一個(gè)代表自身的任務(wù)對(duì)象,即當(dāng)前正在運(yùn)行的協(xié)程。然后它會(huì)報(bào)告當(dāng)前正在運(yùn)行的任務(wù)的詳細(xì)信息。
我們可以看到該任務(wù)具有第一個(gè)任務(wù)的默認(rèn)名稱“Task-1”,并且正在執(zhí)行 main() 協(xié)程,即當(dāng)前正在運(yùn)行的協(xié)程。
這突出表明我們可以使用 asyncio.current_task() 函數(shù)來訪問當(dāng)前正在運(yùn)行的協(xié)程的任務(wù)對(duì)象,該對(duì)象自動(dòng)包裝在任務(wù)對(duì)象中。
main coroutine started <task?pending?name='task-1'?coro=
- python中f字符串以及其常見用法介紹
- 使用Python?Beautiful?Soup解析HTML內(nèi)容的方法
- Python異步怎么使用等待有時(shí)間限制協(xié)程
- Python?Pyperclip模塊怎么安裝和使用
- Python異步之在Asyncio中怎么運(yùn)行阻塞任務(wù)
- Python異步之上下文管理器怎么使用
- Python異步之生成器怎么使用
- Python異步之如何獲取當(dāng)前和正在運(yùn)行任務(wù)
- Python迭代器如何創(chuàng)建使用
- Python中Matplotlib圖像如何添加標(biāo)簽
- Python 開發(fā)環(huán)境
- Python Internet 協(xié)議模塊
- Python IP地址
- Python DNS查找
- Python 路由
- Python 自定義HTTP請(qǐng)求
- Python 構(gòu)建URL
- Python 遠(yuǎn)程過程調(diào)用
- Python 多處理器
- Python 處理器通信