協程 猴子補丁

2021-10-06 11:51:42 字數 2614 閱讀 4492

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正在執行乙個任務,會在兩種情況下切走去...