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

首頁 > 開發 > Python > 正文

Python協程 yield與協程greenlet簡單用法示例

2024-09-09 19:02:57
字體:
來源:轉載
供稿:網友

本文實例講述了Python協程 yield與協程greenlet簡單用法。分享給大家供大家參考,具體如下:

協程

協程,又稱微線程,纖程。英文名Coroutine。

協程是啥

協程是python個中另外一種實現多任務的方式,只不過比線程更小占用更小執行單元(理解為需要的資源)。 為啥說它是一個執行單元,因為它自帶CPU上下文。這樣只要在合適的時機, 我們可以把一個協程 切換到另一個協程。 只要這個過程中保存或恢復 CPU上下文那么程序還是可以運行的。

通俗的理解:在一個線程中的某個函數,可以在任何地方保存當前函數的一些臨時變量等信息,然后切換到另外一個函數中執行,注意不是通過調用函數的方式做到的,并且切換的次數以及什么時候再切換到原來的函數都由開發者自己確定

協程和線程差異

在實現多任務時, 線程切換從系統層面遠不止保存和恢復 CPU上下文這么簡單。 操作系統為了程序運行的高效性每個線程都有自己緩存Cache等等數據,操作系統還會幫你做這些數據的恢復操作。 所以線程的切換非常耗性能。但是協程的切換只是單純的操作CPU的上下文,所以一秒鐘切換個上百萬次系統都抗的住。

簡單實現協程

import timedef work1():  while True:    print("----work1---")    yield    time.sleep(0.5)def work2():  while True:    print("----work2---")    yield    time.sleep(0.5)def main():  w1 = work1()  w2 = work2()  while True:    next(w1)    next(w2)if __name__ == "__main__":  main()

運行結果:

----work1---
----work2---
----work1---
----work2---
----work1---
----work2---
----work1---
----work2---
----work1---
----work2---
----work1---
----work2---
...省略...

greenlet

為了更好使用協程來完成多任務,python中的greenlet模塊對其封裝,從而使得切換任務變的更加簡單

安裝方式

使用如下命令安裝greenlet模塊:

sudo pip3 install greenlet
#coding=utf-8from greenlet import greenletimport timedef test1():  while True:    print "---A--"    gr2.switch()    time.sleep(0.5)def test2():  while True:    print "---B--"    gr1.switch()    time.sleep(0.5)gr1 = greenlet(test1)gr2 = greenlet(test2)#切換到gr1中運行gr1.switch()

運行效果

---A--
---B--
---A--
---B--
---A--
---B--
---A--
---B--
...省略...

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》、《Python+MySQL數據庫程序設計入門教程》及《Python常見數據庫操作技巧匯總》

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜丰县| 万安县| 桐柏县| 克东县| 聂拉木县| 龙岩市| 元阳县| 扬州市| 南昌县| 青浦区| 义乌市| 曲周县| 丹巴县| 宁陕县| 桂阳县| 特克斯县| 交城县| 隆尧县| 江北区| 盘锦市| 罗田县| 土默特左旗| 芦山县| 定兴县| 周至县| 汽车| 临海市| 凤台县| 从江县| 太白县| 武陟县| 琼结县| 孟连| 磐石市| 鹤山市| 镇安县| 安溪县| 铜川市| 柞水县| 郧西县| 昔阳县|