1. 程式人生 > >Python之協程的實現(gevent)

Python之協程的實現(gevent)

1、Python裡面一般用gevent實現協程協程,

     而協程就是在等待的時候切換去做別的操作,相當於將一個執行緒分塊,充分利用資源

(1)低階版協程的實現

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

import gevent

def test1():

print(1,2)

gevent.sleep(0)#執行到這裡的時候切換去函式test2

print

(3,4)

def test2():

print(5,6)

gevent.sleep(0)

print(7,8)

gevent.joinall(

[gevent.spawn(test1),gevent.spawn(test2)]

)#在函式test1等待的時候,協程去執行了函式test2

  結果如圖

這裡屬於手動切換

(2)高階版協程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

from gevent import monkey;monkey.patch_all()# 用來在執行時動態修改已有的程式碼,而不需要修改原始程式碼。

import gevent

import requests

def f(url):

print('GET: %s' % url)

html = requests.get(url).text

print(url,len(html))

gevent.joinall([

gevent.spawn(f,

'http://i.maxthon.cn/'),#先執行這個函式,傳送請求,等待的時候傳送第二個請求

gevent.spawn(f,'http://www.jianshu.com/u/3cfeb3395a95'),

gevent.spawn(f,'http://edu.51cto.com/?jydh'),

])

  執行結果如圖