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

Python中如何創(chuàng)建和運行異步任務詳解

 更新時間:2023年03月22日 15:48:58   作者:冷凍工廠  
這篇文章主要為大家介紹了Python中如何創(chuàng)建和運行異步任務詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

您可以從 asyncio 程序中的協(xié)程創(chuàng)建任務對象。任務提供獨立調度和運行的協(xié)程的句柄,并允許查詢、取消任務,以及稍后檢索結果和異常。異步事件循環(huán)管理任務。因此,所有協(xié)程都成為事件循環(huán)中的任務并作為任務進行管理。

讓我們仔細看看 asyncio 任務。

1. 什么是異步任務

異步任務是一個調度并獨立運行 asyncio 協(xié)程的對象。它提供了一個調度協(xié)程的句柄,asyncio 程序可以查詢并使用它來與協(xié)程交互。

任務是從協(xié)程創(chuàng)建的。它需要一個協(xié)程對象,包裝協(xié)程,安排它執(zhí)行,并提供與之交互的方法。任務獨立執(zhí)行。這意味著它被安排在 asyncio 事件循環(huán)中,并且無論創(chuàng)建它的協(xié)程中發(fā)生了什么,它都會執(zhí)行。這與直接執(zhí)行協(xié)程不同,后者調用者必須等待它完成。

asyncio.Task 類擴展了 asyncio.Future 類,一個實例是可等待的。Future 是一個較低級別的類,代表最終會到達的結果。擴展 Future 類的類通常被稱為 Future-like。

因為異步任務是可等待的,這意味著協(xié)程可以使用 await 表達式等待任務完成。

...
# wait for a task to be done
await task

現(xiàn)在我們知道什么是 asyncio 任務,讓我們看看如何創(chuàng)建一個。

2. 如何創(chuàng)建任務

使用提供的協(xié)程實例創(chuàng)建任務。回想一下協(xié)程是使用 async def 表達式定義的,看起來像一個函數。

# define a coroutine
async def task_coroutine():
	# ...

任務只能在協(xié)程中創(chuàng)建和調度。創(chuàng)建和調度任務有兩種主要方式,它們是:

  • 使用高級 API 創(chuàng)建任務(首選)
  • 使用低級 API 創(chuàng)建任務

2.1. 高級 API

可以使用 asyncio.create_task() 函數創(chuàng)建任務。asyncio.create_task() 函數接受一個協(xié)程實例和一個可選的任務名稱,并返回一個 asyncio.Task 實例。

...
# create a coroutine
coro = task_coroutine()
# create a task from a coroutine
task = asyncio.create_task(coro)

這可以通過在一行中使用復合語句來實現(xiàn)。

...
# create a task from a coroutine
task = asyncio.create_task(task_coroutine())

這將做幾件事:

  • 將協(xié)程包裝在異步任務實例中。
  • 安排任務在當前事件循環(huán)中執(zhí)行。
  • 返回一個任務實例

任務實例可以被丟棄,通過方法與之交互,并由協(xié)程等待。這是從 asyncio 程序中的協(xié)程創(chuàng)建任務的首選方法。

2.2. 低級 API

也可以使用較低級別的 asyncio API 從協(xié)程創(chuàng)建任務。

第一種方法是使用 asyncio.ensure_future() 函數。此函數采用任務、未來或類似未來的對象,例如協(xié)程,以及可選的用于調度它的循環(huán)。如果沒有提供循環(huán),它將被安排在當前事件循環(huán)中。

如果為這個函數提供了協(xié)程,它會為我們包裝在一個實例中,然后返回。

...
# create and schedule the task
task = asyncio.ensure_future(task_coroutine())

我們可以用來創(chuàng)建和調度任務的另一個低級函數是 loop.create_task() 方法。此函數需要訪問特定的事件循環(huán),在該事件循環(huán)中將協(xié)程作為任務執(zhí)行。

我們可以通過 asyncio.get_event_loop() 函數獲取 asyncio 程序中當前事件循環(huán)的實例。然后可以使用它來調用 create_task() 方法來創(chuàng)建一個 Task 實例并安排它執(zhí)行。

...
# get the current event loop
loop = asyncio.get_event_loop()
# create and schedule the task
task = loop.create_task(task_coroutine())

3. 任務何時運行?

創(chuàng)建任務后的一個常見問題是它什么時候運行?

雖然我們可以通過 create_task() 函數調度協(xié)程作為任務獨立運行,但它可能不會立即運行。事實上,直到事件循環(huán)有機會運行,任務才會執(zhí)行。

直到所有其他協(xié)程都沒有運行并且輪到任務運行時才會發(fā)生這種情況。

例如,如果我們有一個 asyncio 程序,其中有一個創(chuàng)建和調度任務的協(xié)程,則調度的任務將不會運行,直到創(chuàng)建任務的調用協(xié)程被掛起。

如果調用協(xié)程選擇休眠,選擇等待另一個協(xié)程或任務,或者選擇等待已安排的新任務,則可能會發(fā)生這種情況。

...
# create a task from a coroutine
task = asyncio.create_task(task_coroutine())
# await the task, allowing it to run
await task

現(xiàn)在我們知道什么是任務以及如何安排它們。

以上就是Python中如何創(chuàng)建和運行異步任務詳解的詳細內容,更多關于Python創(chuàng)建運行異步任務的資料請關注腳本之家其它相關文章!

相關文章

  • 基于python實現(xiàn)微信模板消息

    基于python實現(xiàn)微信模板消息

    本文通過一段代碼實例給大家介紹基于python實現(xiàn)微信模板消息的相關資料,對python模板消息感興趣的朋友一起學習吧
    2015-12-12
  • python使用tkinter模塊實現(xiàn)文件選擇功能

    python使用tkinter模塊實現(xiàn)文件選擇功能

    這篇文章主要介紹了python使用tkinter模塊實現(xiàn)文件選擇功能,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • 淺談python日志的配置文件路徑問題

    淺談python日志的配置文件路徑問題

    下面小編就為大家分享一篇淺談python日志的配置文件路徑問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python迭代器定義與簡單用法分析

    Python迭代器定義與簡單用法分析

    這篇文章主要介紹了Python迭代器定義與簡單用法,結合實例形式分析了迭代器的概念、原理、創(chuàng)建及使用方法,需要的朋友可以參考下
    2018-04-04
  • 使用PyCharm和venv進行Python項目環(huán)境配置避坑指南

    使用PyCharm和venv進行Python項目環(huán)境配置避坑指南

    在進行 Python 項目開發(fā)時,一個干凈,隔離且配置正確的開發(fā)環(huán)境至關重要,本文結合之前安裝 Vanna 庫時遇到的問題,總結了使用 PyCharm 和 venv 進行 Python 項目環(huán)境設置的最佳實踐和常見坑的解決方法,有需要的小伙伴可以參考下
    2025-04-04
  • Python基于Matplotlib庫簡單繪制折線圖的方法示例

    Python基于Matplotlib庫簡單繪制折線圖的方法示例

    這篇文章主要介紹了Python基于Matplotlib庫簡單繪制折線圖的方法,涉及Python Matplotlib庫的相關使用技巧,需要的朋友可以參考下
    2017-08-08
  • Python 實現(xiàn)黑客帝國中的字符雨的示例代碼

    Python 實現(xiàn)黑客帝國中的字符雨的示例代碼

    這篇文章主要介紹了Python 實現(xiàn)黑客帝國中的字符雨的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Python實現(xiàn)自動玩連連看的腳本分享

    Python實現(xiàn)自動玩連連看的腳本分享

    最近女朋友在玩連連看,玩了一個星期了還沒通關,真的是菜。實在是看不過去了,直接用python寫了個腳本代碼可以自動玩連連看,感興趣的可以了解一下
    2022-04-04
  • 新版Pycharm中Matplotlib不會彈出獨立的顯示窗口的問題

    新版Pycharm中Matplotlib不會彈出獨立的顯示窗口的問題

    這篇文章主要介紹了解決新版Pycharm中Matplotlib不會彈出獨立的顯示窗口的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Python語言檢測模塊langid和langdetect的使用實例

    Python語言檢測模塊langid和langdetect的使用實例

    今天小編就為大家分享一篇關于Python語言檢測模塊langid和langdetect的使用實例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

宁国市| 祁东县| 精河县| 丰镇市| 岑巩县| 社旗县| 基隆市| 册亨县| 平度市| 维西| 青冈县| 凤冈县| 达尔| 芮城县| 卫辉市| 探索| 乾安县| 新余市| 武宣县| 衡水市| 广昌县| 三原县| 云林县| 博兴县| 项城市| 怀集县| 从化市| 广东省| 保德县| 方山县| 沙雅县| 永昌县| 彩票| 南漳县| 通许县| 托克托县| 阳江市| 商城县| 汝阳县| 科尔| 襄汾县|