5.1.25 協程
阿新 • • 發佈:2018-06-17
install 另一個 span stop 自動切換 pro con time() 之間
協程:單線程下的並發。又稱微線程。是用戶態的輕量級線程,即協程是由用戶程序自己控制調度的
要遇到IO才切。
比線程開銷更小。
修改共享數據不用加鎖
yield greenlet都無法做到遇到IO就切換
gevent 可以監控多個任務之間的IO,遇到IO切換到另一個任務。
yield:
#並發執行 import time def producer(): g=consumer() next(g) for i in range(10000000): g.send(i) def consumer(): while True: res=yieldstart_time=time.time() producer() stop_time=time.time() print(stop_time-start_time) #串行 import time def producer(): res=[] for i in range(10000000): res.append(i) return res def consumer(res): pass start_time=time.time() res=producer() consumer(res) stop_time=time.time()print(stop_time-start_time)
Greenlet:
#pip3 install greenlet from greenlet import greenlet import time def eat(name): print(‘%s eat 1‘ %name) #time.sleep(10) #遇到IO就不會自動切換了 g2.switch(‘egon‘) print(‘%s eat 2‘ %name) g2.switch() def play(name): print(‘%s play 1‘ %name ) g1.switch()print(‘%s play 2‘ %name ) g1=greenlet(eat) g2=greenlet(play) g1.switch(‘egon‘)
Gevent: 詳見下一節
5.1.25 協程