協(xié)程:
協(xié)程,又稱微線程愕够,纖程走贪。英文名Coroutine。
協(xié)程是python個中另外一種實現(xiàn)多任務的方式惑芭,只不過比線程更小占用更小執(zhí)行單元(理解為需要的資源)坠狡。?
通俗的理解:在一個線程中的某個函數(shù),可以在任何地方保存當前函數(shù)的一些臨時變量等信息遂跟,然后切換到另外一個函數(shù)中執(zhí)行逃沿,注意不是通過調(diào)用函數(shù)的方式做到的,并且切換的次數(shù)以及什么時候再切換到原來的函數(shù)都由開發(fā)者自己確定
簡單實現(xiàn)協(xié)程:
使用如下命令安裝greenlet模塊:
sudo pip3 install greenlet
greenlet已經(jīng)實現(xiàn)了協(xié)程幻锁,但是這個還的人工切換凯亮,是不是覺得太麻煩了,不要捉急哄尔,python還有一個比greenlet更強大的并且能夠自動切換任務的模塊gevent
其原理是當一個greenlet遇到IO(指的是input output 輸入輸出假消,比如網(wǎng)絡、文件操作等)操作時岭接,比如訪問網(wǎng)絡置谦,就自動切換到其他的greenlet,等到IO操作完成亿傅,再在適當?shù)臅r候切換回來繼續(xù)執(zhí)行媒峡。
由于IO操作非常耗時,經(jīng)常使程序處于等待狀態(tài)葵擎,有了gevent為我們自動切換協(xié)程谅阿,就保證總有greenlet在運行,而不是等待IO
gevent( 內(nèi)部采用協(xié)程實現(xiàn) )
遇到延時就會切換,不延時就不會切換
使用:
? ? 先import gevent引用
有耗時操作時需要:(將程序中用到的耗時操作的代碼签餐,換成為gevent中自己實現(xiàn)的模塊)
?猴子補对⒄恰:monkey.patch_all()
join()方法是在等g1執(zhí)行完,是檢驗延時操作來切換實現(xiàn)多任務
如果要執(zhí)行的方法多就用gevent.joinall()氯檐,就是等待所有