最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用grequests(gevent+requests)并發(fā)發(fā)送請求過程解析

 更新時間:2019年09月25日 14:50:03   作者:韓志超  
這篇文章主要介紹了Python使用grequests并發(fā)發(fā)送請求過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

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

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

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

安裝方法: pip install gevent grequests

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

grequests簡單使用

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

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) # 打印第一個請求的響應(yīng)文本

grequests支持get、post、put、delete等requests支持的HTTP請求方法,使用參數(shù)和requests一致,發(fā)送請求非常簡單。
通過遍歷res_list可以得到所有請求的返回結(jié)果。

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()方法還支持自定義異常處理函數(shù),示例如下。

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)

運行結(jié)果:

請求出錯
請求出錯
[None, None, <Response [500]>]

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3 實現(xiàn)遞歸求階乘

    Python3 實現(xiàn)遞歸求階乘

    這篇文章主要介紹了Python3 實現(xiàn)遞歸求階乘的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 9個提高?Python?編程的小技巧

    9個提高?Python?編程的小技巧

    這篇文章主要介紹了9個提高?Python?編程的小技巧,下文分享python編程技巧,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-05-05
  • python實現(xiàn)在目錄中查找指定文件的方法

    python實現(xiàn)在目錄中查找指定文件的方法

    這篇文章主要介紹了python實現(xiàn)在目錄中查找指定文件的方法,通過模糊查找與精確查找兩個實例較為詳細的闡述了文件查找的方法,是非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • python基礎(chǔ)教程之udp端口掃描

    python基礎(chǔ)教程之udp端口掃描

    開發(fā)一個程序,用于獲取局域網(wǎng)中開啟snmp服務(wù)的主機ip地址列表,并寫入相應(yīng)文件以便其它程序使用。下面是實現(xiàn)方法
    2014-02-02
  • python實現(xiàn)的正則表達式功能入門教程【經(jīng)典】

    python實現(xiàn)的正則表達式功能入門教程【經(jīng)典】

    這篇文章主要介紹了python實現(xiàn)的正則表達式功能,詳細分析了Python正則表達式中常用的各種符號、函數(shù)等的使用方法與注意事項,需要的朋友可以參考下
    2017-06-06
  • Python自動化處理手機驗證碼

    Python自動化處理手機驗證碼

    手機驗證碼是一種常見的身份驗證手段,廣泛應(yīng)用于用戶注冊、登錄、交易確認(rèn)等場景,下面我們來看看如何使用Python自動化處理手機驗證碼吧
    2025-02-02
  • python?自定義包的實現(xiàn)示例

    python?自定義包的實現(xiàn)示例

    如果Python的模塊過多,可能造成一定的混亂,這時可以通過Python包來管理模塊,本文主要介紹了python?自定義包的實現(xiàn)示例,感興趣的可以了解一下
    2024-05-05
  • 用python與文件進行交互的方法

    用python與文件進行交互的方法

    本篇文章主要介紹了用python與文件進行交互的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python Queue模塊詳解

    Python Queue模塊詳解

    這篇文章主要介紹了Python Queue模塊詳解,需要的朋友可以參考下
    2014-11-11
  • Python多進程與服務(wù)器并發(fā)原理及用法實例分析

    Python多進程與服務(wù)器并發(fā)原理及用法實例分析

    這篇文章主要介紹了Python多進程與服務(wù)器并發(fā)原理及用法,深入淺出的介紹了進程、并行、并發(fā)、同步、異步等相關(guān)概念與原理,并結(jié)合實例形式給出了Python多進程編程相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08

最新評論

海口市| 五原县| 淮滨县| 蒙阴县| 越西县| 东明县| 新绛县| 云林县| 来安县| 府谷县| 垦利县| 隆林| 张家界市| 保定市| 康平县| 高雄县| 湘乡市| 淮安市| 漾濞| 兴隆县| 长沙县| 洪泽县| 札达县| 周宁县| 田东县| 安图县| 天峻县| 建阳市| 汉源县| 武陟县| 鹤壁市| 雅安市| 罗甸县| 阿拉善盟| 泸定县| 涞水县| 洪泽县| 长丰县| 普安县| 尉氏县| 华安县|