from greenlet import greenlet
import time
def task1
(temp)
:print
("===="
)print
("執行任務a"
) str2=b.
switch()
time.
sleep(1
)print
("執行任務a完成"
+str
(str2)
+str
(temp)
)def task2()
:print
("執行任務b"
) c.
switch()
time.
sleep(5
)print
("執行任務b完成"
) a.
switch
("789"
)def task3()
:print
("執行任務c"
) a.
switch
("456"
) time.
sleep(1
)print
("執行任務c完成"
)if __name__ ==
'__main__'
: a=
greenlet
(task1)
b=greenlet
(task2)
c=greenlet
(task3)
#a.run("123")
a.switch
("123"
)
from gevent import monkey,spawn
import time
monkey.
patch_all()
def task1()
:print
("執行任務a"
) time.
sleep(2
)print
("執行任務a完成"
)def task2()
:print
("執行任務b"
) time.
sleep(5
)print
("執行任務b完成"
)def task3()
:print
("執行任務c"
) time.
sleep(1
)print
("執行任務c完成"
)def task4()
:print
("執行任務d"
) time.
sleep(1
)print
("執行任務d完成"
)if __name__ ==
'__main__'
: a=
spawn
(task1)
b=spawn
(task2)
c=spawn
(task3)
d =spawn
(task4)
a.join()
b.join()
c.join()
d.join
()
import gevent
from gevent import monkey
import requests
import urllib.request
import time
monkey.
patch_all()
def my_down
(*url)
: response=urllib.request.
urlopen
(url[0]
) content=response.
read()
# response=requests.get(url[0])
# content = response.text()
print
("檔案的路徑{},檔案大小{}"
.format
(url[0]
,len
(content)))
print
("{}*****"
.format
(url[0]
))if __name__ ==
'__main__'
: urls =
["",""
,""] a = gevent.
spawn
(my_down,
*(urls[0]
,10))
b = gevent.
spawn
(my_down,
*(urls[1]
,9))
c = gevent.
spawn
(my_down,
*(urls[2]
,8))
gevent.
joinall
([a, b, c]
)
協程gevent模組和猴子補丁
pip 裝模組 greenlet和gevent 協程 與程序 執行緒一樣也是實現併發的手段 建立乙個執行緒 關閉乙個執行緒都需要建立暫存器 棧等 需要消耗時間 協程本質上是乙個執行緒 能夠在多個任務之間切換來節省一些io時間 協程中任務之間的切換時間開銷,要遠遠小於程序或執行緒之間的切換 4cpu中...
協程巢狀協程
import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...
9 協程 協程理論
本節的主題是基於單執行緒來實現併發,即只用乙個主線程 很明顯可利用的cpu只有乙個 情況下實現併發,為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態cpu正在執行乙個任務,會在兩種情況下切走去...