【python】1000次請求最少幾秒完成?來探討下

前言

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比較可以看出使用進程+協程的方式性能比較高一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章