python request与grequests该如何选择
requests & grequests
requests 和 grequests 是Python中用于发送HTTP请求的不同库。requests 是一个同步、阻塞式库,而 grequests 是基于 requests 封装的异步非阻塞库,它利用了 gevent 库提供的协程机制,能够并发发送多个请求。
选择哪个库取决于你的需求:
当你只需要顺序发送少量请求,或者不关心请求之间并发性能的时候,requests 是一个很好的选择,因为它易于理解和使用。
当你需要并发处理大量HTTP请求,提高整体性能,尤其是网络IO密集型任务时,如爬虫抓取大量页面、API服务端并发请求下游服务等场景下,grequests 更合适。
单线程同步请求(使用requests)
-
import requests -
urls = ["https://example.com/page1", "https://example.com/page2", "https://example.com/page3"] -
# 单线程同步请求 -
responses = [requests.get(url) for url in urls] -
# 处理响应 -
for response in responses: -
print(response.text)
多线程同步请求(使用requests配合threading)
-
import requests -
import threading -
# 创建一个处理请求的函数 -
def fetch_page(url): -
response = requests.get(url) -
return response.text -
urls = ["https://example.com/page1", "https://example.com/page2", "https://example.com/page3"] -
threads = [] -
# 启动多线程请求 -
for url in urls: -
thread = threading.Thread(target=fetch_page, args=(url,)) -
threads.append(thread) -
thread.start() -
# 等待所有线程完成 -
for thread in threads: -
thread.join() -
# 假设你有一个列表存储结果 -
results = [result for result in thread_results]
异步并发请求(使用grequests)
-
import grequests -
urls = ["https://example.com/page1", "https://example.com/page2", "https://example.com/page3"] -
# 异步并发请求 -
rs = (grequests.get(url) for url in urls) -
responses = grequests.map(rs) -
# 处理响应 -
for response in responses: -
print(response.text)
超时控制(grequests可以更方便地处理超时)
-
import grequests -
# 对每个请求设置超时时间为5秒 -
urls = [("https://example.com/page{}".format(i), {'timeout': 5}) for i in range(1, 4)] -
rs = (grequests.get(url, **kwargs) for url, kwargs in urls) -
responses = grequests.map(rs) -
for response in responses: -
if response is not None: -
print(response.text) -
else: -
print(f"Request timed out for {response.request.url}")
带异常处理的异步请求(grequests可以在一个循环中统一处理异常)
-
import grequests -
urls = ["https://example.com/page1", "https://example.com/page2", "https://example.com/page3"] -
rs = [grequests.get(url) for url in urls] -
def handle_exception(request, exception): -
print(f"Error on URL {request.url}: {exception}") -
responses = grequests.map(rs, size=10, exception_handler=handle_exception) -
for response in responses: -
if response is not None: -
print(f"{response.request.url} - Response: {response.text}")
在最后这个例子中,grequests.map() 同时发送多个请求,当有请求发生异常时,通过自定义的 exception_handler 函数来处理异常,而不是让整个程序崩溃。同时,size 参数指定了最大并发数,有助于避免一次性发起过多请求导致服务器压力过大。
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

相关文章:
python request与grequests该如何选择
requests & grequests requests 和 grequests 是Python中用于发送HTTP请求的不同库。requests 是一个同步、阻塞式库,而 grequests 是基于 requests 封装的异步非阻塞库,它利用了 gevent 库提供的协程机制,能够并发发送多个请求。 选择…...
Unity3D UI 拖拽
Unity3D 实现 UI 元素拖拽功能。 UI 拖拽 通常画布上的 UI 元素都是固定位置的,我们可以通过实现拖拽接口,让 UI 元素可以被拖拽到其他位置。 拖拽接口 创建一个脚本 UIDrag.cs,在默认继承的 MonoBehaviour 后面,再继承三个接…...
介绍一下memcpy(c基础)
memcpy函数void *memcpy(void *dest, const void *src, size_t n); dest:指向目标内存区域的指针,即复制的目的地。src:指向源内存区域的指针,即要被复制的内容的来源。n:要复制的字节数 主要功能是将src所指向的内存…...
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
目录 一、相关面试题 1. HTTP 与 HTTPS 有哪些区别? 2. HTTPS 的工作原理?(https 是怎么建立连接的) (1)ClientHello (2)SeverHello (3)客户端回应 &a…...
python-23-一篇文章帮你理解Python推导式
python-23-一篇文章帮你理解Python推导式 一.简介 在 Python 中,推导式(Comprehensions)是一个简洁的语法,用于通过某种可迭代对象快速生成新的对象(如列表、字典、集合等!来开始我们今天的日拱一卒&…...
WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查
目录 开始前准备的数据库dbblog如下: 第一步:创建项目后下载四个NuGet程序包 第二步:删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.X…...
CesiumJS 案例 P15:检测标记、鼠标点击移动标记、鼠标拖动标记
CesiumJS CesiumJS API:https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图) 一、检测标记 <!DOCTYPE html> <html lang"en&…...
Webserver(4.9)本地套接字的通信
目录 本地套接字 本地套接字 TCP\UDP实现不同主机、网络通信 本地套接字实现本地的进程间的通信,类似的,一般采用TCP的通信流程 生成套接字文件 #include<arpa/inet.h> #include<stdio.h> #include<stdlib.h> #include<unistd.h&…...
[IAA系列] Image Aesthetic Assessment
Preface 本文旨在记录个人结合AI工具对IAA这个领域的一些了解,主要是通过论文阅读的方式加深对领域的了解。有什么问题,欢迎在评论区提出并讨论。 什么是IAA Image Aesthetic Assessment(图像美学评估)是一种评估图像在视觉上的…...
基于springboot的高校科研管理系统(源码+调试+LW)
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题,今天给…...
Flutter环境配置
配置环境变量 PUB_HOSTED_URLhttps://pub.flutter-io.cn FLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 这个命令是用来配置 Flutter 的镜像源地址,主要是为了解决在中国大陆地区访问 Flutter 官方资源较慢的问题 具体的操作做如下: 右键点击"此…...
Rip动态路由及Rip动态路由优化
动态路由Rip Tip:Rip动态路由实现多个路由间不同网段通信。 本次实验目的,通过给ar1,ar2,ar3配置rip动态路由,实现pc1 ping通 pc2。 AR1配置如下: <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]…...
双路快速排序和三路排序算法
双路快速排序 一、概念及其介绍 双路快速排序算法是随机化快速排序的改进版本,partition 过程使用两个索引值(i、j)用来遍历数组,将 <v 的元素放在索引i所指向位置的左边,而将 >v 的元素放在索引j所指向位置的…...
SQL server增删改查语句和实例
在 SQL Server 中,增删改查操作分别对应 INSERT、DELETE、UPDATE 和 SELECT 语句。以下是具体介绍及实例: 一、插入数据(INSERT) 语法: INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, val…...
强化学习_06_pytorch-PPO2实践(ALE/Breakout-v5)
一、环境适当调整 数据收集:RecordEpisodeStatistics进行起始跳过n帧:baseSkipFrame一条生命结束记录为done:EpisodicLifeEnv得分处理成0或1:ClipRewardEnv叠帧: FrameStack 图像环境的基本操作,方便CNN捕捉智能体的行动 向量空间reset处理修…...
《JVM第8课》垃圾回收算法
文章目录 1.标记算法1.1 引用计数法1.2 可达性分析法 2.回收算法2.1 标记-清除算法(Mark-Sweep)2.2 复制算法(Coping)2.3 标记-整理算法(Mark-Compact) 3.三种垃圾回收算法的对比 为什么要进行垃圾回收&…...
SpringBoot整合Freemarker(二)
if分支 语法: <#if condition>... <#elseif condition2>... <#elseif condition3>... <#else>... </#if> 例子: <#if x 1>x is 1 </#if> --------------------------------- <#if x 1>x is 1 <…...
element plus el-form自定义验证输入框为纯数字函数
element plus 的el-form 使用自定义验证器,验证纯数字,禁止输入小数、中文、字母、特殊符号。input的maxlength为最大输入多少位长度 效果图 <el-form ref"dataFormRef" :model"dataForm" :rules"dataRules" label-w…...
Android笔记(三十一):Deeplink失效问题
背景 通过deeplink启动应用之后,没关闭应用的情况下,再次使用deeplink会失效的问题,是系统bug导致的。此bug仅在某些设备(Nexus 5X)上重现,launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…...
图神经网络初步实验
实验复现来源 https://zhuanlan.zhihu.com/p/603486955 该文章主要解决问题: 1.加深对图神经网络数据集的理解 2.加深对图神经网络模型中喂数据中维度变化的理解 原理问题在另一篇文章分析: 介绍数据集:cora数据集 其中的主要内容表示为…...
旧房改造完整施工流程
旧房改造是一项复杂而细致的工程,不仅需要专业的技术,还需要科学合理的规划。以下是旧房改造的完整施工流程,帮助您更好地了解整个过程。一、前期准备1. 现场勘测具体操作:专业人员对房屋进行全面检查,包括墙体老化、漏…...
【Windows版Redis安装本地使用】
本地安装运行 一、Redis官网 二、下载 三、配置redis服务 一、Redis官网 官网: redis 二、下载 下载版本:版本下载 下载完后,解压文件到文件夹 三、配置redis服务 打开目录对应的终端 安装redis服务 redis-server.exe --service-install redis.windows.conf --loglevel verbos…...
5分钟快速上手APK Installer:Windows电脑安装Android应用的终极指南
5分钟快速上手APK Installer:Windows电脑安装Android应用的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行Android应用…...
10个实用技巧:PHP Font Lib 字体信息提取完全教程
10个实用技巧:PHP Font Lib 字体信息提取完全教程 【免费下载链接】php-font-lib A library to read, parse, export and make subsets of different types of font files. 项目地址: https://gitcode.com/gh_mirrors/ph/php-font-lib 想要在PHP项目中高效处…...
Taotoken的用量分析与账单追溯功能让财务对账更轻松
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的用量分析与账单追溯功能让财务对账更轻松 对于依赖大模型API进行开发的企业或项目团队而言,成本核算与费用分…...
我把Cursor和Copilot都扔了:实测Token从120万砍到4万
Claude Code称霸后,我把Cursor和Copilot都扔了:实测Token从120万砍到4万上周,Graphon AI 低调完成 830 万美元融资,推出 “pre-model intelligence layer” 来解决企业多模态数据关联难题;几乎同一时间,Ant…...
从零到一:华大HC32L110C6PA GPIO操作避坑指南(附完整代码)
从零到一:华大HC32L110C6PA GPIO操作避坑指南(附完整代码) 第一次接触华大HC32L110C6PA这款MCU时,我被它小巧的体积和丰富的功能所吸引。但当我真正开始GPIO配置时,却发现官方文档中的某些细节并不像想象中那么直观。…...
Cadence Virtuoso计算器函数面板:从仿真波形到关键指标,手把手教你提取运放GBW和相位裕度
Cadence Virtuoso计算器函数实战:运放AC特性自动化评估指南 在模拟电路设计的日常工作中,我们常常需要面对这样的场景:完成运放AC仿真后,面对密密麻麻的波形曲线,如何快速准确地提取出增益带宽积(GBW)和相位裕度(PM)这…...
Zynq-7000 Linux系统构建全流程:从Vivado硬件配置到内核启动调试
1. 项目概述:为什么要在Zynq上折腾Linux?如果你手头有一块Xilinx Zynq-7000系列(比如我用的黑金Zynq7020)开发板,并且想把它从一个单纯的FPGA逻辑验证平台,变成一个能跑完整操作系统、可以灵活编程、还能用…...
BIN文件操作指南:从字节视角到实战应用
1. 项目概述:为什么我们需要系统性地掌握BIN文件操作?在嵌入式开发、固件逆向、游戏修改乃至数据恢复这些领域里,我们经常会遇到一个后缀名为.bin的文件。很多新手朋友第一次接触时可能会有点懵,这既不是文本文件可以直接打开看&a…...
