python程式設計 9 協程 coroutine

2021-07-17 05:55:24 字數 1060 閱讀 1305

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 是乙個...