日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python模塊asyncio-異步IO,事件循環(huán)和并發(fā)

模塊 asyncio 是一個異步IO和并發(fā)框架。

“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)建站的服務宗旨!把網(wǎng)站當作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設中就是為了建設一個不僅審美在線,而且實用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設計、網(wǎng)站優(yōu)化、網(wǎng)絡推廣、探索永無止境。

asyncio 提供了協(xié)程 coroutines 創(chuàng)建并發(fā)應用,它使用單線程,單進程的模式進行顯示的任務切換。大部分的任務切換都發(fā)生在可能會阻塞的地方,例如讀取文件或者網(wǎng)絡等等。asyncio 提供了一些特性包括在指定時間運行某個任務,指示某個 coroutines 等待其他的完成才開始執(zhí)行等等。

模塊 threading 和 multiprocessing 分別使用多線程和多進程進行多任務的同步運行。

概念

大多數(shù)應用程序都是線性的開發(fā),然后依賴語言底層的線程或者進程切換任務并行運行。基于 asyncio 開發(fā)的并發(fā)程序需要在程序中手動進行上下文的切換,因為它運行在單線程,單進程的模式上。下面是需要理解的一些概念。

asyncio 框架里需要重點專注的是事件循環(huán)(event loop),它是處理事件(event)的一個主要對象,例如IO事件、系統(tǒng)事件、應用任務切換等等。

應用首先需要注冊(register)要運行的任務到事件循環(huán)中,當?shù)玫剿璧馁Y源后,已注冊的任務被事件循環(huán)喚醒執(zhí)行。例如服務端程序當收到一個客戶端的請求或者有數(shù)據(jù)要讀取時再執(zhí)行操作,當處理完成后,立刻把控制權交回給事件循環(huán)準備接受下一個事件。

控制器交回給事件循環(huán)依賴協(xié)程 coroutines,它是一個特殊的函數(shù)把控制器交回而不丟失狀態(tài),這和 yield 非常類似。事實上,在 Python 3.5 之前要想實現(xiàn)協(xié)程,就要使用 yield 生成器函數(shù)。asyncio 提供了基于類的抽象層,可以直接寫回調方法而不用寫協(xié)程。

對象 Future 是一個表示結果的數(shù)據(jù)結構,asyncio 可以監(jiān)控一個 Future 對象允許應用等待一項任務完成時返回。

Future 的子類 Task 知道怎么管理一個協(xié)程的執(zhí)行,Task 可以等待一個資源可用時,由事件循環(huán)調用。

協(xié)程 Coroutine

協(xié)程 Coroutine 是運行并發(fā)操作的一個語言結構,一個協(xié)程函數(shù)調用的時候就創(chuàng)建了一個攜程對象,然后調用對象的 send() 方法就會執(zhí)行它定義的代碼。協(xié)程還可以使用 await 關鍵字暫停執(zhí)行,暫停的時候不會丟失狀態(tài),然后可以等待喚醒繼續(xù)執(zhí)行。

運行協(xié)程

要讓一個事件循環(huán)運行協(xié)程,最簡單的方法是調用 run_until_complete(),參數(shù)傳遞一個協(xié)程對象。

執(zhí)行:

本例使用 async 關鍵字放在函數(shù) coroutine() 之前,代表這是一個協(xié)程函數(shù)。run_until_complete() 方法傳入?yún)f(xié)程對象,開始事件循環(huán),直到協(xié)程對象退出后返回。***使用 try:finally 確保***關閉事件循環(huán)。

從協(xié)程返回值

run_until_complete() 可以返回協(xié)程的結果。

執(zhí)行:

協(xié)程鏈

一個協(xié)程可以啟動另一個協(xié)程,并等待它的結果,這樣更容易把一個任務分解成多個可重用的部分。下面的例子展示了必須順序執(zhí)行的兩個協(xié)程,但是和其他的協(xié)程可以并發(fā)的運行。

執(zhí)行:

本例在協(xié)程 worker() 中,創(chuàng)建了兩個協(xié)程,使用關鍵字 await。因為控制流已經(jīng)在事件循環(huán)中了,所以這里創(chuàng)建的兩個協(xié)程也被事件循環(huán)管理。

協(xié)程調用普通函數(shù)

asyncio 在事件循環(huán)中還可以調用普通函數(shù),如果對調用時間沒有要求,方法 call_soon() 會在事件循環(huán)的下次調用函數(shù)。

call_soon() 方法的***個參數(shù)是函數(shù)引用,第二個參數(shù)是傳遞給函數(shù)的參數(shù)。如果需要傳遞多個參數(shù),例如關鍵字參數(shù),可以使用 functools 模塊的 partial() 函數(shù)。

執(zhí)行:

延遲調用函數(shù)

使用方法 call_later() 延遲調用回調函數(shù),***個參數(shù)是要延遲的時間,單位是秒。

執(zhí)行:

本例中,同樣的回調函數(shù)使用不同的參數(shù)調用了多次,call_soon() 方法會使用最小的延遲時間,所以它***個執(zhí)行。

指定的時間調用函數(shù)

有時候需要在指定的時間執(zhí)行回調函數(shù)。事件循環(huán)使用的時鐘是 monotonic clock,而不是掛鐘時間 wall time。所以為了保證時間不會倒退,應該使用事件循環(huán)的時間,因為 wall time 是可以修改的。

monotonic clock 代表某個時間點自然流逝的時間,不受 time-of-day 時鐘修改的影響,例如你不想因為電腦重啟而影響時間的話,就應該使用它。

wall time 通常就是我們在電腦上看到的時間,可以手動修改也包括 NTP 對它的修改。(NTP: Network Time Protocol 是用來使網(wǎng)絡時間和本地時間同步的協(xié)議,它可以使服務器或時鐘源同步修改時間)

執(zhí)行:


新聞標題:Python模塊asyncio-異步IO,事件循環(huán)和并發(fā)
轉載源于:http://m.5511xx.com/article/cdsegjc.html