亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 2019 0

1.進程和線程

2. 同步和異步

3.協程

4.生成器到協程

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

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

1.進程和線程

進程

相當于一個任務,比如做飯

線程

相當于操作,做飯需要?解凍肉,洗菜,煮米飯

一個進程任務,做飯下需要多進程? 做飯的多個進程,如上

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

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

GIL全局解釋器鎖是用在IO密集型(大量的文件讀寫,多次請求網絡數據)的多線程中

對比單線程和多線程的例子:

調用包?time和?線程包:threading?

先模擬請求網絡數據的函數?request_data()

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

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

多線程這里輸出的0.0126秒?這么快實際上是只要多線程中的100個線程中的任意一個線程結束了,就開始計算時間去了

所以需要再修改一下程序才行,需要調用join方法

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

join方法實現了?只要100個線程沒有完全結束,就阻塞在那里,不執行計算時間的步驟

現在的時間增加了一點

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

2. 同步和異步

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

由于線程和進程都是由操作系統決定的,所以CPU搶占時間片的事控制不了

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

3.協程

比線程的顆粒度小,可以控制線程什么時候執行和怎么關聯

python異步(并行)編程 聽課筆記_第7張圖片
協程其實是通過?生成器實現的?generator

關鍵:yield? ? 相當于一個return?語句?

g?一個生成器? 每次調用的時候用next?來生成下一個數

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

惰性生成器

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

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

這個包可以查看生成器的狀態

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

在執行一次之后就變成了 掛起狀態 GEN_SUSPENDED,等待下一次的yeild的調用

?

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

修改一下語句:使得后面可以接受值?傳給vaule?給生成器里面傳值? ?

可以利用send方法?把一個值傳給value?

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

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

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

可以通過for循環將生成器中的所有值調用出來

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

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

通過?g.close()?關閉迭代器

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

4.生成器到協程

裝飾器:以一個函數作為參數,并返回一個函數

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

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

因為需要激活生成器,激活yeild的下一個輸出。

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

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

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

一個小例子? 用到了 chain函數

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

python異步(并行)編程 聽課筆記_第20張圖片 ? 這是輸的結果,驗證了chain函數的功能

接下來使用yield關鍵字實現chain方法 ,在這里我想看看return語句的功能結果讓我大吃一驚

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

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

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

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

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

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

yeild from 案例

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

yeild 的作用:可以停止程序的運行,等待下一次next,cpu會因為yeild而停止,就是協程

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

簡化工作 用 asyncio.coroutine 裝飾器快速創建協程函數

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

創建協程函數需要用到 asyncio.coroutine?

event_loop 中包含任務,任務中包含對象,對象中有協程函數

event_loop 事件循環可以實現哪一個協程先執行,哪一個后執行

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

這段代碼中并沒有? yeild 語句,但是函數開始前一行是一個@asyncio.coroutine? 裝飾器,這個裝飾器直接把這個request_data()函數變成了協程函數

?

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

再加一個任務,合起來執行

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

這就結束了? ?這只是個開頭,接下來再學習新的東西……


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 骚碰97| 久久综合资源 | 久久亚洲国产成人精品性色 | 亚洲伊人国产 | 国产国语videosex | 牛牛影院成人免费网页 | 欧美经典人人爽人人爽人人片 | 精品国产一区二区三区www | 中文字幕亚洲一区二区va在线 | 日本波多野结衣在线 | 热热色视频 | 精品视频在线观看一区二区三区 | 日韩www| xx性欧美高清 | 欧美性精品hd在线观看 | 久久免费精彩视频 | 欧美一级高清片欧美国产欧美 | 久久这里是精品 | 国产欧美日本在线观看 | 精品一区二区久久久久久久网精 | 成人亚洲欧美日韩在线观看 | jizz女人| 摸一摸操一操 | 婷婷五月色综合香五月 | 欧日韩在线不卡视频 | 成人免费淫片在线费观看 | 在线精品一区二区三区 | 久久国产在线观看 | 视频一区在线 | 欧美精品亚洲精品日韩专 | 四虎影视成人永久在线观看 | 欧美激情精品久久久久久不卡 | 欧美成人亚洲国产精品 | 狠狠久久综合伊人不卡 | 搡女人免费的视频 | 亚洲综合色吧 | 抱着cao才爽免费观看 | 国产成人精品午夜免费 | 巨乳毛片| 亚洲欧美久久精品1区2区 | 国产激情久久久久影 |