国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解python中asyncio模塊

2020-02-22 23:21:07
字體:
來源:轉載
供稿:網友

一直對asyncio這個庫比較感興趣,畢竟這是官網也非常推薦的一個實現高并發的一個模塊,python也是在python 3.4中引入了協程的概念。也通過這次整理更加深刻理解這個模塊的使用

asyncio 是干什么的?

異步網絡操作并發協程

python3.0時代,標準庫里的異步網絡模塊:select(非常底層) python3.0時代,第三方異步網絡庫:Tornado python3.4時代,asyncio:支持TCP,子進程

現在的asyncio,有了很多的模塊已經在支持:aiohttp,aiodns,aioredis等等 https://github.com/aio-libs 這里列出了已經支持的內容,并在持續更新

當然到目前為止實現協程的不僅僅只有asyncio,tornado和gevent都實現了類似功能

關于asyncio的一些關鍵字的說明:

event_loop 事件循環:程序開啟一個無限循環,把一些函數注冊到事件循環上,當滿足事件發生的時候,調用相應的協程函數

coroutine 協程:協程對象,指一個使用async關鍵字定義的函數,它的調用不會立即執行函數,而是會返回一個協程對象。協程對象需要注冊到事件循環,由事件循環調用。

task 任務:一個協程對象就是一個原生可以掛起的函數,任務則是對協程進一步封裝,其中包含了任務的各種狀態

future: 代表將來執行或沒有執行的任務的結果。它和task上沒有本質上的區別

async/await 關鍵字:python3.5用于定義協程的關鍵字,async定義一個協程,await用于掛起阻塞的異步調用接口。

看了上面這些關鍵字,你可能扭頭就走了,其實一開始了解和研究asyncio這個模塊有種抵觸,自己也不知道為啥,這也導致很長一段時間,這個模塊自己也基本就沒有關注和使用,但是隨著工作上用python遇到各種性能問題的時候,自己告訴自己還是要好好學習學習這個模塊。

定義一個協程

import timeimport asyncionow = lambda : time.time()async def do_some_work(x):  print("waiting:", x)start = now()# 這里是一個協程對象,這個時候do_some_work函數并沒有執行coroutine = do_some_work(2)print(coroutine)# 創建一個事件looploop = asyncio.get_event_loop()# 將協程加入到事件循環looploop.run_until_complete(coroutine)print("Time:",now()-start)

在上面帶中我們通過async關鍵字定義一個協程(coroutine),當然協程不能直接運行,需要將協程加入到事件循環loop中

asyncio.get_event_loop:創建一個事件循環,然后使用run_until_complete將協程注冊到事件循環,并啟動事件循環

創建一個task

協程對象不能直接運行,在注冊事件循環的時候,其實是run_until_complete方法將協程包裝成為了一個任務(task)對象. task對象是Future類的子類,保存了協程運行后的狀態,用于未來獲取協程的結果

import asyncioimport timenow = lambda: time.time()async def do_some_work(x):  print("waiting:", x)start = now()coroutine = do_some_work(2)loop = asyncio.get_event_loop()task = loop.create_task(coroutine)print(task)loop.run_until_complete(task)print(task)print("Time:",now()-start)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正阳县| 静海县| 郴州市| 东海县| 尖扎县| 太湖县| 台山市| 汤原县| 禄丰县| 班玛县| 儋州市| 庐江县| 吉水县| 古田县| 田阳县| 东丰县| 安吉县| 墨竹工卡县| 桃源县| 中阳县| 潞西市| 柯坪县| 平度市| 科技| 英山县| 新平| 肃南| 涡阳县| 福安市| 即墨市| 扬州市| 富裕县| 河东区| 交口县| 广安市| 永泰县| 胶南市| 阳山县| 商南县| 新和县| 兰坪|