最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2023年03月22日 14:32:08   作者:冷凍工廠  
這篇文章主要為大家介紹了Python?異步之如何獲取當(dāng)前和正在運(yùn)行任務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jì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=<main() running at ...> cb=[_run_until_complete_cb() at ...]>

2. 如何獲取所有任務(wù)

我們可能需要訪問異步程序中的所有任務(wù)。這可能有很多原因,例如:

  • 反省程序的當(dāng)前狀態(tài)或復(fù)雜性。
  • 記錄所有正在運(yùn)行的任務(wù)的詳細(xì)信息。
  • 查找可以查詢或取消的任務(wù)。

我們可以通過 asyncio.all_tasks() 函數(shù)在 asyncio 程序中獲取一組所有已計(jì)劃和正在運(yùn)行(尚未完成)的任務(wù)。

...
# get all tasks
tasks = asyncio.all_tasks()

這將返回 asyncio 程序中所有任務(wù)的集合。它是一個(gè)集合,因此每個(gè)任務(wù)只代表一次。

如果出現(xiàn)以下情況,將包括一項(xiàng)任務(wù):

  • 任務(wù)已安排但尚未運(yùn)行。
  • 該任務(wù)當(dāng)前正在運(yùn)行(例如,但當(dāng)前已暫停)

該集合還將包括當(dāng)前正在運(yùn)行的任務(wù)的任務(wù),例如正在執(zhí)行調(diào)用 asyncio.all_tasks() 函數(shù)的協(xié)程的任務(wù)。

另外,回想一下用于啟動(dòng) asyncio 程序的 asyncio.run() 方法會(huì)將提供的協(xié)程包裝在任務(wù)中。這意味著所有任務(wù)的集合將包括程序入口點(diǎn)的任務(wù)。

我們可以探索在一個(gè) asyncio 程序中有很多任務(wù)的情況,然后得到一組所有任務(wù)。

在此示例中,我們首先創(chuàng)建 10 個(gè)任務(wù),每個(gè)任務(wù)包裝并運(yùn)行相同的協(xié)程。主協(xié)程然后獲取程序中計(jì)劃或運(yùn)行的所有任務(wù)的集合并報(bào)告它們的詳細(xì)信息。

下面列出了完整的示例。

# SuperFastPython.com
# example of starting many tasks and getting access to all tasks
import asyncio
# coroutine for a task
async def task_coroutine(value):
    # report a message
    print(f'task {value} is running')
    # block for a moment
    await asyncio.sleep(1)
# define a main coroutine
async def main():
    # report a message
    print('main coroutine started')
    # start many tasks
    started_tasks = [asyncio.create_task(task_coroutine(i)) for i in range(10)]
    # allow some of the tasks time to start
    await asyncio.sleep(0.1)
    # get all tasks
    tasks = asyncio.all_tasks()
    # report all tasks
    for task in tasks:
        print(f'&gt; {task.get_name()}, {task.get_coro()}')
    # wait for all tasks to complete
    for task in started_tasks:
        await task
# start the asyncio program
asyncio.run(main())

運(yùn)行該示例首先創(chuàng)建主協(xié)程并使用它來啟動(dòng) asyncio 程序。main() 協(xié)程運(yùn)行并首先報(bào)告一條消息。然后它創(chuàng)建并安排 10 個(gè)包裝自定義協(xié)程的任務(wù)。然后 main() 協(xié)程會(huì)阻塞片刻以允許任務(wù)開始運(yùn)行。任務(wù)開始運(yùn)行,每個(gè)任務(wù)報(bào)告一條消息,然后休眠。

main() 協(xié)程恢復(fù)并獲取程序中所有任務(wù)的列表。然后它報(bào)告每個(gè)的名稱和協(xié)程。最后,它枚舉已創(chuàng)建的任務(wù)列表并等待每個(gè)任務(wù)完成。

這突出表明我們可以獲得 asyncio 程序中所有任務(wù)的集合,其中包括創(chuàng)建的任務(wù)以及代表程序入口點(diǎn)的任務(wù)。

main coroutine started
task 0 is running
task 1 is running
task 2 is running
task 3 is running
task 4 is running
task 5 is running
task 6 is running
task 7 is running
task 8 is running
task 9 is running
> Task-9, <coroutine object task_coroutine at 0x10e186e30>
> Task-2, <coroutine object task_coroutine at 0x10e184e40>
> Task-11, <coroutine object task_coroutine at 0x10e186f10>
> Task-7, <coroutine object task_coroutine at 0x10e186d50>
> Task-4, <coroutine object task_coroutine at 0x10e185700>
> Task-10, <coroutine object task_coroutine at 0x10e186ea0>
> Task-8, <coroutine object task_coroutine at 0x10e186dc0>
> Task-5, <coroutine object task_coroutine at 0x10e186ab0>
> Task-1, <coroutine object main at 0x10e1847b0>
> Task-3, <coroutine object task_coroutine at 0x10e184f90>
> Task-6, <coroutine object task_coroutine at 0x10e186ce0>

接下來,我們將探討如何同時(shí)運(yùn)行多個(gè)協(xié)程。

以上就是Python 異步之如何獲取當(dāng)前和正在運(yùn)行任務(wù)詳解的詳細(xì)內(nèi)容,更多關(guān)于Python 異步獲取當(dāng)前運(yùn)行任務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python如何在終端彩色打印輸出

    Python如何在終端彩色打印輸出

    大家好,本篇文章主要講的是Python如何在終端彩色打印輸出,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • python中將正則過濾的內(nèi)容輸出寫入到文件中的實(shí)例

    python中將正則過濾的內(nèi)容輸出寫入到文件中的實(shí)例

    今天小編就為大家分享一篇python中將正則過濾的內(nèi)容輸出寫入到文件中的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python列表刪除所有出現(xiàn)元素的兩種方法

    Python列表刪除所有出現(xiàn)元素的兩種方法

    今天寫代碼的時(shí)候遇到一個(gè)小問題,Python中要?jiǎng)h除列表中的所有元素,本文主要介紹了Python列表刪除所有出現(xiàn)元素的兩種方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Python字符串本身作為bytes進(jìn)行解碼的問題

    Python字符串本身作為bytes進(jìn)行解碼的問題

    這篇文章主要介紹了解決Python字符串本身作為bytes進(jìn)行解碼的問題,文末給大家補(bǔ)充介紹了,Python字符串如何轉(zhuǎn)為bytes對(duì)象?Python字符串和bytes類型怎么互轉(zhuǎn),需要的朋友可以參考下
    2022-11-11
  • python matplotlib庫繪制條形圖練習(xí)題

    python matplotlib庫繪制條形圖練習(xí)題

    這篇文章主要介紹了python matplotlib庫繪制條形圖練習(xí)題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 詳解Python的Django框架中Manager方法的使用

    詳解Python的Django框架中Manager方法的使用

    這篇文章主要介紹了Python的Django框架中Manager方法的使用,包括修改初始Manager QuerySets和增加額外的Manager方法等操作,需要的朋友可以參考下
    2015-07-07
  • 公眾號(hào)接入chatGPT的詳細(xì)教程 附Python源碼

    公眾號(hào)接入chatGPT的詳細(xì)教程 附Python源碼

    這篇文章主要介紹了公眾號(hào)接入chatGPT教程附Python源碼,這里需要大家準(zhǔn)備一個(gè)域名,一臺(tái)服務(wù)器和一個(gè)公眾號(hào),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • python在TXT文件中按照某一字符串取出該字符串所在的行方法

    python在TXT文件中按照某一字符串取出該字符串所在的行方法

    今天小編就為大家分享一篇python在TXT文件中按照某一字符串取出該字符串所在的行方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作

    python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作

    這篇文章主要介紹了python 實(shí)現(xiàn)循環(huán)定義、賦值多個(gè)變量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 示例詳解python中的排序

    示例詳解python中的排序

    本文詳細(xì)介紹了如何使用Python實(shí)現(xiàn)兩組數(shù)據(jù)的縱向排序,包括開發(fā)思想、開發(fā)流程和代碼示例,感興趣的朋友一起看看吧
    2024-12-12

最新評(píng)論

治多县| 商南县| 新昌县| 泰顺县| 公安县| 海城市| 青河县| 黑龙江省| 离岛区| 潍坊市| 隆德县| 太仆寺旗| 祁阳县| 阳高县| 克拉玛依市| 永康市| 盈江县| 云南省| 墨玉县| 闸北区| 承德县| 张掖市| 河东区| 隆安县| 泰和县| 专栏| 秭归县| 罗城| 舞阳县| 钟山县| 山西省| 五莲县| 黑河市| 鹰潭市| 恩施市| 南澳县| 隆昌县| 教育| 满洲里市| 屏东县| 陵川县|