前言
linux環境:Oracle VM VirtualBox【CentOS7(64-bit)】
python版本:python2.7
需要先了解的知識點:
1.使用協程gevent
安排:我們先用1000個協程gevent來實現下看看
# -*- coding: utf-8 -*-
import datetime
import gevent
from gevent import monkey; monkey.patch_socket()
import requests
def func():
r = requests.get("https://www.baidu.com/")
def gevent_func(gevent_num):
gevents=[]
a=datetime.datetime.now()
for num in range(gevent_num):
g1 = gevent.spawn(func)
gevents.append(g1)
gevent.joinall(gevents)
b=datetime.datetime.now()
print('start time:%s,end time:%s,use time:%s'% (a,b,(b-a)))
####調用事例###########
#協程數
gevent_num=1000
gevent_func(gevent_num)
看下結果是:1分1秒
2.下面使用進程+協程處理
安排:用2個進程(每個進程下500個協程)來實現下看看
import datetime
from multiprocessing import Process
from gevent import monkey
import gevent
monkey.patch_socket()
import requests
def func(i):
r = requests.get("https://www.baidu.com/")
def f(n):
gevents=[]
for i in range(500):
g1 = gevent.spawn(func, i)
gevents.append(g1)
gevent.joinall(gevents)
def main():
procs=[]
for i in range(2):
t1 = Process(target=f, args=(i,))
t1.start()
procs.append(t1)
for i in procs:
i.join()
print("-------begin main-------")
a=datetime.datetime.now()
main()
b=datetime.datetime.now()
print('start time:%s,end time:%s,use time:%s'% (a,b,(b-a)))
print("-------end main-------")
可以看到這裏用了43秒
3.總結
從步驟1和2比較可以看出使用進程+協程的方式性能比較高一些。