日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现http请求并发_Python使用grequests并发发送请求

發(fā)布時間:2025/1/21 python 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现http请求并发_Python使用grequests并发发送请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

requests是Python發(fā)送接口請求非常好用的一個三方庫,由K神編寫,簡單,方便上手快。但是requests發(fā)送請求是串行的,即阻塞的。發(fā)送完一條請求才能發(fā)送另一條請求。

為了提升測試效率,一般我們需要并行發(fā)送請求。這里可以使用多線程,或者協程,gevent或者aiohttp,然而使用起來,都相對麻煩。

grequests是K神基于gevent+requests編寫的一個并發(fā)發(fā)送請求的庫,使用起來非常簡單。

安裝方法: pip install gevent grequests

項目地址:https://github.com/spyoungtech/grequests

grequests簡單使用

首先構造一個請求列表,使用grequests.map()并行發(fā)送,得到一個響應列表。示例如下。

import grequests

req_list = [ # 請求列表

grequests.get('http://httpbin.org/get?a=1&b=2'),

grequests.post('http://httpbin.org/post', data={'a':1,'b':2}),

grequests.put('http://httpbin.org/post', json={'a': 1, 'b': 2}),

]

res_list = grequests.map(req_list) # 并行發(fā)送,等最后一個運行完后返回

print(res_list[0].text) # 打印第一個請求的響應文本

grequests支持get、post、put、delete等requests支持的HTTP請求方法,使用參數和requests一致,發(fā)送請求非常簡單。

通過遍歷res_list可以得到所有請求的返回結果。

grequests和requests性能對比

我們可以對比下requests串行和grequests并行請求100次github.com的時間,示例如下。

使用requests發(fā)送請求

import requests

import time

start = time.time()

res_list = [requests.get('https://github.com') for i in range(100)]

print(time.time()-start)

實際耗時約100s+

使用grequests發(fā)送

import grequests

import time

start = time.time()

req_list = [grequests.get('https://github.com') for i in range(100)]

res_list = grequests.map(req_list)

print(time.time()-start)

實際耗時約3.58s

異常處理

在批量發(fā)送請求時難免遇到某個請求url無法訪問或超時等異常,grequests.map()方法還支持自定義異常處理函數,示例如下。

import grequests

def err_handler(request, exception):

print("請求出錯")

req_list = [

grequests.get('http://httpbin.org/delay/1', timeout=0.001), # 超時異常

grequests.get('http://fakedomain/'), # 該域名不存在

grequests.get('http://httpbin.org/status/500') # 正常返回500的請求

]

res_list = grequests.map(reqs, exception_handler=err_handler)

print(res_list)

運行結果:

請求出錯

請求出錯

[None, None, ]

總結

以上是生活随笔為你收集整理的python实现http请求并发_Python使用grequests并发发送请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。