欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

淺析Python中的asyncio

asyncio理解

最近突然想了解一下Python的異步編程,于是乎就去了解了下asyncio的使用。借用官網(wǎng)的話

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),秦皇島企業(yè)網(wǎng)站建設(shè),秦皇島品牌網(wǎng)站建設(shè),網(wǎng)站定制,秦皇島網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,秦皇島網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

asyncio 是用來編寫并發(fā)代碼的庫,使用 async/await 語法。其用作多個提供高性能 Python 異步框架的基礎(chǔ),包括網(wǎng)絡(luò)和網(wǎng)站服務(wù),數(shù)據(jù)庫連接庫,分布式任務(wù)隊列等等。

要理解Python的異步編程方式這里我直接上例子

import asyncio

async def main():
    print('Hello ...')
    await asyncio.sleep(1)
    print('... World!')

main()

運行結(jié)果

RuntimeWarning: coroutine 'main' was never awaited

可以看到對于加了async的方法直接調(diào)用是無法運行出結(jié)果的,這是因為async修飾的函數(shù)其運行的返回結(jié)果是一個coroutine對象,而coroutine對象需要放到Event Loop中才能執(zhí)行。

所以我們把上述代碼改成

async def main():
    print('Hello ...')
    await asyncio.sleep(1)
    print('... World!')

asyncio.run(main())

運行結(jié)果

Hello ...
... World!

這樣我們就解決了coroutine的運行問題。下面我們再來嘗試實現(xiàn)一下異步程序,看代碼

import asyncio
import time

async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)

async def main():
    print(f"started at {time.strftime('%X')}")
    await say_after(1, 'hello')
    await say_after(2, 'world')
    print(f"finished at {time.strftime('%X')}")

asyncio.run(main())

運行結(jié)果按道理應(yīng)該是間隔了3s,可是結(jié)果如下

started at 14:07:43
hello
world
finished at 14:07:46

這是為什么呢?查閱一番資料發(fā)現(xiàn)Python中的異步執(zhí)行模式依賴于Event Loop,在等待的間隙中需要從Event Loop中找其它可以運行的程序,await關(guān)鍵字就是將coroutine轉(zhuǎn)化成一個task加入到Event Loop中去,而執(zhí)行第一個say_after的時候,第二個say_after并沒有加入到Event Loop中去,所以在第一個say_after等待的時候無法去執(zhí)行第二個say_after,最終導(dǎo)致的結(jié)果就是程序運行了3s,并沒有達到異步的效果。

有兩種方式解決這個問題

1、提前將兩個say_after加入到eventloop中

async def main():
    task1 = asyncio.create_task(say_after(1, 'hello'))
    task2 = asyncio.create_task(say_after(2, 'world'))
    print(f"started at {time.strftime('%X')}")
    await task1
    await task2
    print(f"finished at {time.strftime('%X')}")

2、使用gather方法

async def main():
    print(f"started at {time.strftime('%X')}")
    await asyncio.gather(
        say_after(1, 'hello'),
        say_after(2, 'world')
    )
    print(f"finished at {time.strftime('%X')}")

最后二者的運行結(jié)果都是間隔了2s

started at 14:17:43
hello
world
finished at 14:17:45

最后,需要提醒的是,對于Python的asyncio來說,無論何時都只有1條語句運行在cpu上,所以如果我們的程序沒有等待的時候,asyncio其實并沒有什么幫助。

參考資料

Python官方文檔
B站大佬講解

網(wǎng)頁標(biāo)題:淺析Python中的asyncio
當(dāng)前URL:http://chinadenli.net/article30/dsogjpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號品牌網(wǎng)站設(shè)計、網(wǎng)站收錄、云服務(wù)器軟件開發(fā)、

廣告

聲明:本網(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)

成都seo排名網(wǎng)站優(yōu)化
亚洲国产中文字幕在线观看| 一区二区三区18禁看| 亚洲中文字幕高清视频在线观看| 狠狠做深爱婷婷久久综合| 日本淫片一区二区三区| 亚洲欧美国产中文色妇| 亚洲免费黄色高清在线观看| 在线观看欧美视频一区| 久久人人爽人人爽大片av| 白丝美女被插入视频在线观看| 最新国产欧美精品91| 国产一区二区三区香蕉av| 色好吊视频这里只有精| 亚洲中文字幕三区四区| 香蕉网尹人综合在线观看| 亚洲国产精品久久综合网| 亚洲国产中文字幕在线观看| 91人妻丝袜一区二区三区| 日本av在线不卡一区| 国产一区二区熟女精品免费| 国产成人精品资源在线观看| 91人妻人人澡人人人人精品| 国产一区欧美一区日本道| 亚洲欧美国产网爆精品| 国产精品熟女乱色一区二区| 亚洲欧美精品伊人久久| av在线免费播放一区二区| 大香蕉伊人一区二区三区| 日本高清一区免费不卡| 欧美一级日韩中文字幕| 91蜜臀精品一区二区三区| 男女一进一出午夜视频| 大胆裸体写真一区二区| 最近日韩在线免费黄片| 亚洲视频一区自拍偷拍另类| 狠狠亚洲丁香综合久久| 国产一区国产二区在线视频| 亚洲一区精品二人人爽久久| 亚洲天堂一区在线播放| 老鸭窝老鸭窝一区二区| 精品推荐国产麻豆剧传媒|