中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么創建和運行異步任務

發布時間:2023-05-11 17:18:00 來源:億速云 閱讀:116 作者:iii 欄目:開發技術

今天小編給大家分享一下Python中怎么創建和運行異步任務的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    1. 什么是異步任務

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

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

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

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

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

    現在我們知道什么是 asyncio 任務,讓我們看看如何創建一個。

    2. 如何創建任務

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

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

    任務只能在協程中創建和調度。創建和調度任務有兩種主要方式,它們是:

    • 使用高級 API 創建任務(首選)

    • 使用低級 API 創建任務

    2.1. 高級 API

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

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

    這可以通過在一行中使用復合語句來實現。

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

    這將做幾件事:

    • 將協程包裝在異步任務實例中。

    • 安排任務在當前事件循環中執行。

    • 返回一個任務實例

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

    2.2. 低級 API

    也可以使用較低級別的 asyncio API 從協程創建任務。

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

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

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

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

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

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

    3. 任務何時運行?

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

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

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

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

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

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

    現在我們知道什么是任務以及如何安排它們。

    以上就是“Python中怎么創建和運行異步任務”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    新昌县| 广州市| 东海县| 肃北| 浪卡子县| 奉贤区| 贺州市| 南召县| 三亚市| 吴桥县| 九龙城区| 桓台县| 山东| 万安县| 通海县| 梧州市| 洛南县| 晋中市| 石狮市| 板桥市| 河津市| 新巴尔虎右旗| 鹤山市| 延安市| 辽阳市| 南部县| 兴仁县| 巢湖市| 东乡县| 巩义市| 昂仁县| 论坛| 凤山市| 闻喜县| 平顶山市| 应用必备| 岗巴县| 平乐县| 稷山县| 江北区| 土默特右旗|