def consumer():
r = ''
while true:#python的yield不但可以返回乙個值,他還可以接收呼叫者的發出的引數
n = yield r #生成器,通過yield拿到訊息(n),並把結果返回r
if not n:
return
print("[consumer] consuming %s..." %n)
r = '200 ok'#把結果返回r
def produce(c):
c.send(none)#啟動生成器
n = 0
while n < 5:
n = n + 1
print("[produce]producing %s" %n)
r = c.send(n) #生產了東西,切換到consumer執行
print("[produce]consumer return:%s" %r) #produce拿到consumer的處理的結果,繼續生產下一條訊息
c.close() #produce決定不生產了,通過c.close關閉consumer,整個過程結束
c = consumer()
produce(c)
#協程#子程式就是協程的一種特列
注意到consumer函式是乙個generator,把乙個consumer傳入produce後:
首先呼叫c.send(none)啟動生成器;
然後,一旦生產了東西,通過c.send(n)切換到consumer執行;
consumer通過yield拿到訊息,處理,又通過yield把結果傳回;
produce拿到consumer處理的結果,繼續生產下一條訊息;
produce決定不生產了,通過c.close()關閉consumer,整個過程結束。
整個流程無鎖,由乙個執行緒執行,produce和consumer協作完成任務,所以稱為「協程」,而非執行緒的搶占式多工
9 協程 協程理論
本節的主題是基於單執行緒來實現併發,即只用乙個主線程 很明顯可利用的cpu只有乙個 情況下實現併發,為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態cpu正在執行乙個任務,會在兩種情況下切走去...
python 併發程式設計 協程 協程介紹
協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明什麼是執行緒 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的 需要強調的是 1.python的執行緒屬於核心級別的,即由作業系統控制排程 如單執行緒遇到io或執行時間過長就會被迫交出cpu執行許可...
Python 併發程式設計(協程)
本章節主要介紹,使用單執行緒實現併發,即只用乙個主線程 很明顯可利用cpu只有乙個 為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態 單執行緒下併發稱為 協程 特點 缺點 gevent 是乙個...