先上利於理解的代碼: 1 #coding:utf-8 2 def consumer(): 3 c_r = '' 4 while 1: 5 m = yield c_r 6 if not m: 7 return 8 ...
先上利於理解的代碼:
1 #coding:utf-8 2 def consumer(): 3 c_r = '' 4 while 1: 5 m = yield c_r 6 if not m: 7 return 8 print("consumer {}".format(m)) 9 c_r = '200 ok' 10 def produce(c): 11 n = 0 12 next(c) 13 while n<5: 14 n+=1 15 print("produce {}".format(n)) 16 p_r = c.send(n) 17 print("consumer return {}".format(p_r)) 18 c.close() 19 c = consumer() 20 produce(c)
1. next(c)啟動生成器(順便一提next(c)等價於c.send(None))。
2. 在produce里遇到c.send(None)時,就去執行consumer的代碼,在consumer里遇到yield時,就會跳到produce去執行,並且帶上c_r的值,會賦予p_r。
3. 在迴圈中,下一次遇到c.send(n)時,又跳去執行consumer的代碼,此時會將n的值帶上,賦予m。
4. 其實質就是通過c.send()和yield這兩個關鍵點,在兩個任務間跳轉執行,並且會捎帶上一些信息。