本篇內(nèi)容主要講解“Python中如何創(chuàng)建和運行異步任務(wù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Python中如何創(chuàng)建和運行異步任務(wù)”吧!
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供十堰企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站設(shè)計、H5頁面制作、小程序制作等業(yè)務(wù)。10年已為十堰眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
異步任務(wù)是一個調(diào)度并獨立運行 asyncio 協(xié)程的對象。它提供了一個調(diào)度協(xié)程的句柄,asyncio 程序可以查詢并使用它來與協(xié)程交互。
任務(wù)是從協(xié)程創(chuàng)建的。它需要一個協(xié)程對象,包裝協(xié)程,安排它執(zhí)行,并提供與之交互的方法。任務(wù)獨立執(zhí)行。這意味著它被安排在 asyncio 事件循環(huán)中,并且無論創(chuàng)建它的協(xié)程中發(fā)生了什么,它都會執(zhí)行。這與直接執(zhí)行協(xié)程不同,后者調(diào)用者必須等待它完成。
asyncio.Task 類擴展了 asyncio.Future 類,一個實例是可等待的。Future 是一個較低級別的類,代表最終會到達(dá)的結(jié)果。擴展 Future 類的類通常被稱為 Future-like。
因為異步任務(wù)是可等待的,這意味著協(xié)程可以使用 await 表達(dá)式等待任務(wù)完成。
... # wait for a task to be done await task
現(xiàn)在我們知道什么是 asyncio 任務(wù),讓我們看看如何創(chuàng)建一個。
使用提供的協(xié)程實例創(chuàng)建任務(wù)?;叵胍幌聟f(xié)程是使用 async def 表達(dá)式定義的,看起來像一個函數(shù)。
# define a coroutine async def task_coroutine(): # ...
任務(wù)只能在協(xié)程中創(chuàng)建和調(diào)度。創(chuàng)建和調(diào)度任務(wù)有兩種主要方式,它們是:
使用高級 API 創(chuàng)建任務(wù)(首選)
使用低級 API 創(chuàng)建任務(wù)
可以使用 asyncio.create_task() 函數(shù)創(chuàng)建任務(wù)。asyncio.create_task() 函數(shù)接受一個協(xié)程實例和一個可選的任務(wù)名稱,并返回一個 asyncio.Task 實例。
... # create a coroutine coro = task_coroutine() # create a task from a coroutine task = asyncio.create_task(coro)
這可以通過在一行中使用復(fù)合語句來實現(xiàn)。
... # create a task from a coroutine task = asyncio.create_task(task_coroutine())
這將做幾件事:
將協(xié)程包裝在異步任務(wù)實例中。
安排任務(wù)在當(dāng)前事件循環(huán)中執(zhí)行。
返回一個任務(wù)實例
任務(wù)實例可以被丟棄,通過方法與之交互,并由協(xié)程等待。這是從 asyncio 程序中的協(xié)程創(chuàng)建任務(wù)的首選方法。
也可以使用較低級別的 asyncio API 從協(xié)程創(chuàng)建任務(wù)。
第一種方法是使用 asyncio.ensure_future() 函數(shù)。此函數(shù)采用任務(wù)、未來或類似未來的對象,例如協(xié)程,以及可選的用于調(diào)度它的循環(huán)。如果沒有提供循環(huán),它將被安排在當(dāng)前事件循環(huán)中。
如果為這個函數(shù)提供了協(xié)程,它會為我們包裝在一個實例中,然后返回。
... # create and schedule the task task = asyncio.ensure_future(task_coroutine())
我們可以用來創(chuàng)建和調(diào)度任務(wù)的另一個低級函數(shù)是 loop.create_task() 方法。此函數(shù)需要訪問特定的事件循環(huán),在該事件循環(huán)中將協(xié)程作為任務(wù)執(zhí)行。
我們可以通過 asyncio.get_event_loop() 函數(shù)獲取 asyncio 程序中當(dāng)前事件循環(huán)的實例。然后可以使用它來調(diào)用 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())
創(chuàng)建任務(wù)后的一個常見問題是它什么時候運行?
雖然我們可以通過 create_task() 函數(shù)調(diào)度協(xié)程作為任務(wù)獨立運行,但它可能不會立即運行。事實上,直到事件循環(huán)有機會運行,任務(wù)才會執(zhí)行。
直到所有其他協(xié)程都沒有運行并且輪到任務(wù)運行時才會發(fā)生這種情況。
例如,如果我們有一個 asyncio 程序,其中有一個創(chuàng)建和調(diào)度任務(wù)的協(xié)程,則調(diào)度的任務(wù)將不會運行,直到創(chuàng)建任務(wù)的調(diào)用協(xié)程被掛起。
如果調(diào)用協(xié)程選擇休眠,選擇等待另一個協(xié)程或任務(wù),或者選擇等待已安排的新任務(wù),則可能會發(fā)生這種情況。
... # create a task from a coroutine task = asyncio.create_task(task_coroutine()) # await the task, allowing it to run await task
現(xiàn)在我們知道什么是任務(wù)以及如何安排它們。
到此,相信大家對“Python中如何創(chuàng)建和運行異步任務(wù)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章題目:Python中如何創(chuàng)建和運行異步任務(wù)
分享網(wǎng)址:http://jinyejixie.com/article42/jjhoec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、營銷型網(wǎng)站建設(shè)、域名注冊、自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)