日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python異步(并行)編程 聽(tīng)課筆記

系統(tǒng) 1940 0

1.進(jìn)程和線程

2. 同步和異步

3.協(xié)程

4.生成器到協(xié)程

5.asyncio?模塊(協(xié)程模塊)

………………………………………………………………………………

1.進(jìn)程和線程

進(jìn)程

相當(dāng)于一個(gè)任務(wù),比如做飯

線程

相當(dāng)于操作,做飯需要?解凍肉,洗菜,煮米飯

一個(gè)進(jìn)程任務(wù),做飯下需要多進(jìn)程? 做飯的多個(gè)進(jìn)程,如上

python異步(并行)編程 聽(tīng)課筆記_第1張圖片

python異步(并行)編程 聽(tīng)課筆記_第2張圖片

GIL全局解釋器鎖是用在IO密集型(大量的文件讀寫,多次請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù))的多線程中

對(duì)比單線程和多線程的例子:

調(diào)用包?time和?線程包:threading?

先模擬請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)的函數(shù)?request_data()

python異步(并行)編程 聽(tīng)課筆記_第3張圖片

? python異步(并行)編程 聽(tīng)課筆記_第4張圖片

多線程這里輸出的0.0126秒?這么快實(shí)際上是只要多線程中的100個(gè)線程中的任意一個(gè)線程結(jié)束了,就開(kāi)始計(jì)算時(shí)間去了

所以需要再修改一下程序才行,需要調(diào)用join方法

python異步(并行)編程 聽(tīng)課筆記_第5張圖片

join方法實(shí)現(xiàn)了?只要100個(gè)線程沒(méi)有完全結(jié)束,就阻塞在那里,不執(zhí)行計(jì)算時(shí)間的步驟

現(xiàn)在的時(shí)間增加了一點(diǎn)

…………………………………………………………………………………………………

2. 同步和異步

python異步(并行)編程 聽(tīng)課筆記_第6張圖片

由于線程和進(jìn)程都是由操作系統(tǒng)決定的,所以CPU搶占時(shí)間片的事控制不了

……………………………………………………………………………………

3.協(xié)程

比線程的顆粒度小,可以控制線程什么時(shí)候執(zhí)行和怎么關(guān)聯(lián)

python異步(并行)編程 聽(tīng)課筆記_第7張圖片
協(xié)程其實(shí)是通過(guò)?生成器實(shí)現(xiàn)的?generator

關(guān)鍵:yield? ? 相當(dāng)于一個(gè)return?語(yǔ)句?

g?一個(gè)生成器? 每次調(diào)用的時(shí)候用next?來(lái)生成下一個(gè)數(shù)

python異步(并行)編程 聽(tīng)課筆記_第8張圖片

惰性生成器

python異步(并行)編程 聽(tīng)課筆記_第9張圖片

python異步(并行)編程 聽(tīng)課筆記_第10張圖片

這個(gè)包可以查看生成器的狀態(tài)

python異步(并行)編程 聽(tīng)課筆記_第11張圖片

在執(zhí)行一次之后就變成了 掛起狀態(tài) GEN_SUSPENDED,等待下一次的yeild的調(diào)用

?

python異步(并行)編程 聽(tīng)課筆記_第12張圖片

修改一下語(yǔ)句:使得后面可以接受值?傳給vaule?給生成器里面?zhèn)髦? ?

可以利用send方法?把一個(gè)值傳給value?

同樣?為了使這個(gè)值有接受的地方,需要修改一下語(yǔ)句, 將?yield?b?改成value=yield b?

python異步(并行)編程 聽(tīng)課筆記_第13張圖片 ?可以在這里設(shè)置斷點(diǎn)?查看value?的值

python異步(并行)編程 聽(tīng)課筆記_第14張圖片

可以通過(guò)for循環(huán)將生成器中的所有值調(diào)用出來(lái)

通過(guò)print(g.throw(ValueError))? 可以拋出異常,讓生成器來(lái)捕獲一些異常

python異步(并行)編程 聽(tīng)課筆記_第15張圖片

通過(guò)?g.close()?關(guān)閉迭代器

……………………………………………………………………………………

4.生成器到協(xié)程

裝飾器:以一個(gè)函數(shù)作為參數(shù),并返回一個(gè)函數(shù)

python異步(并行)編程 聽(tīng)課筆記_第16張圖片

裝飾器有什么作用? ?:? 激活生成器

因?yàn)樾枰せ钌善鳎せ顈eild的下一個(gè)輸出。

激活的方法用好幾種:g.next()? ?g.send('hhh')? 裝飾器active() 函數(shù)??

python異步(并行)編程 聽(tīng)課筆記_第17張圖片

python異步(并行)編程 聽(tīng)課筆記_第18張圖片

一個(gè)小例子? 用到了 chain函數(shù)

python異步(并行)編程 聽(tīng)課筆記_第19張圖片

python異步(并行)編程 聽(tīng)課筆記_第20張圖片 ? 這是輸?shù)慕Y(jié)果,驗(yàn)證了chain函數(shù)的功能

接下來(lái)使用yield關(guān)鍵字實(shí)現(xiàn)chain方法 ,在這里我想看看return語(yǔ)句的功能結(jié)果讓我大吃一驚

python異步(并行)編程 聽(tīng)課筆記_第21張圖片

python異步(并行)編程 聽(tīng)課筆記_第22張圖片

關(guān)于 yeild? 的介紹? 這篇博文不錯(cuò)哦? 可以看?https://blog.csdn.net/mieleizhi0522/article/details/82142856

為了更加節(jié)省代碼,直接用 yeild from 代替for 循環(huán)(在生成器中)

            
              def my_chain(*args): #*args 表示可以輸入任意個(gè)參數(shù)?
? ? for iter_obj in args:
# ? ? ? ?for i in iter_obj:
# ? ? ? ? ? ?yield i
? ? ? ? yield from iter_obj
            
          

python異步(并行)編程 聽(tīng)課筆記_第23張圖片

yeild from 案例

python異步(并行)編程 聽(tīng)課筆記_第24張圖片

yeild 的作用:可以停止程序的運(yùn)行,等待下一次next,cpu會(huì)因?yàn)閥eild而停止,就是協(xié)程

5.asyncio?模塊(協(xié)程模塊)

簡(jiǎn)化工作 用 asyncio.coroutine 裝飾器快速創(chuàng)建協(xié)程函數(shù)

python異步(并行)編程 聽(tīng)課筆記_第25張圖片

創(chuàng)建協(xié)程函數(shù)需要用到 asyncio.coroutine?

event_loop 中包含任務(wù),任務(wù)中包含對(duì)象,對(duì)象中有協(xié)程函數(shù)

event_loop 事件循環(huán)可以實(shí)現(xiàn)哪一個(gè)協(xié)程先執(zhí)行,哪一個(gè)后執(zhí)行

python異步(并行)編程 聽(tīng)課筆記_第26張圖片

這段代碼中并沒(méi)有? yeild 語(yǔ)句,但是函數(shù)開(kāi)始前一行是一個(gè)@asyncio.coroutine? 裝飾器,這個(gè)裝飾器直接把這個(gè)request_data()函數(shù)變成了協(xié)程函數(shù)

?

python異步(并行)編程 聽(tīng)課筆記_第27張圖片

再加一個(gè)任務(wù),合起來(lái)執(zhí)行

python異步(并行)編程 聽(tīng)課筆記_第28張圖片

這就結(jié)束了? ?這只是個(gè)開(kāi)頭,接下來(lái)再學(xué)習(xí)新的東西……


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 澄迈县| 肇源县| 瑞丽市| 台安县| 漳州市| 桃江县| 界首市| 阳信县| 合山市| 北辰区| 宜君县| 昆山市| 白沙| 钟祥市| 平罗县| 白玉县| 万年县| 秭归县| 睢宁县| 琼海市| 常宁市| 青阳县| 柳州市| 嘉黎县| 景泰县| 宁津县| 林州市| 莲花县| 澄江县| 都兰县| 翁牛特旗| 开鲁县| 巴里| 伽师县| 庆城县| 镇巴县| 安溪县| 工布江达县| 依安县| 临颍县| 沂水县|