1. 程式人生 > >異步請求Python庫 grequests的應用和與requests庫的響應速度的比較

異步請求Python庫 grequests的應用和與requests庫的響應速度的比較

for () ans 一個 code anti 其他 others int

requests庫是python一個優秀的HTTP庫,使用它可以非常簡單地執行HTTP的各種操作,例如GET、POST等。不過,這個庫所執行的網絡請求都是同步了,即cpu發出請求指令後,IO執行發送和等待等操作,在這段IO執行的時間裏,cpu什麽也不做,這樣cpu的計算能力就被浪費了。所以,可以嘗試把網絡請求修改為異步的,也就是在IO發揮作用的這段時間,CPU去做這個程序裏的其他事情,等IO收到響應的數據,CPU回來處理。偶然發現下面的帖子特分享與大家,並與requests庫進行簡單響應速度比較:

建議先閱讀原博主文章:


感謝原博主的分享精神,轉到原博地址: HTTPS://WWW.LETIANTIAN.ME/2014-10-04-ASYNCHRONOUS-REQUESTS/



-----------------------------------華麗的分割線-----------------------------------------------------------------------

下面是對 grequests庫和requests庫的響應比較

# -*- coding: utf-8 -*-
import grequests
import time
import requests
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

# 同網絡環境下比較結果

now = int(time.time())
timeArray = time.localtime(now)
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S"
, timeArray)
print otherStyleTime
urls = [‘http://letiantian.me/‘] * 10
# ------------------- grequests 庫請求-------------------------------------
# reqs = [grequests.get(url) for url in urls] # 用時1秒左右
# response = grequests.map(reqs)
# print response[9].status_code
# ------------------- requests 庫請求-------------------------------------
reqs = [requests.get(url) for url in urls] # 用時7秒
print reqs[9].status_code
now2 = int(time.time())
timeArray2 = time.localtime(now2)
otherStyleTime2 = time.strftime("%Y--%m--%d %H:%M:%S", timeArray2)
print otherStyleTime,‘-------------‘,otherStyleTime2
pasting

異步請求Python庫 grequests的應用和與requests庫的響應速度的比較