grequests | 高性能的http客户端 | Python 主题月

简介: grequests | 高性能的http客户端 | Python 主题月

网络异常,图片无法展示
|



关于 grequests



众所周知,requests 出于 K神 之手,但它是串行的,在并发场景下效率会受到阻塞的影响而变得低下。他一度认为程序是为人设计的,这不,当人们需要异步发送请求,提高请求效率的时候,他又推出了全新的 grequests 库(仅 100 多行代码)。

grequests 是基于 geventrequests 开发的,效果和你单独使用 gevent 去发送 requests 请求基本一致,但是用 grequests 会简单上不少,何乐而不为呢?该说不说,K神 牛掰!


网络异常,图片无法展示
|


走进 grequests


用过 requests 的兄弟对 grequests 不会陌生,因为你会发现用法极其相似。


安装

pip install grequests
复制代码


例子


使用 grequests 异步请求百度


import grequests,time
url = 'https://www.baidu.com'
req_list = [
    grequests.get(url),
    grequests.get(url),
    grequests.get(url),
]
start_time=time.time()
res_list = grequests.map(req_list)
end_time=time.time()
print(res_list,end_time-start_time)
复制代码


网络异常,图片无法展示
|


使用 requests 串行请求百度


import  requests,time
url = 'https://www.baidu.com'
start_time=time.time()
res1 = requests.get(url)
res2 = requests.get(url)
res3 = requests.get(url)
end_time=time.time()
print([res1,res2,res3],end_time-start_time)
复制代码


网络异常,图片无法展示
|


对比分析


根据结果,你会发现,grequestsrequests 的功能完全一致,但是粗略估计 grequestsrequests 的性能提升 186% 不止。并发量越大,提升越大。


关于 grequests.map()


grequests.map()接收一个 AsyncRequest 列表对象,map 方法中会将这个列表转化为任务队列,然后交给 gevent 去异步执行。任务全部结束后返回一个 response 列表。


网络异常,图片无法展示
|


网络异常,图片无法展示
|


高级用法


自定义异常处理

import grequests,time
# 自定义错误处理程序,接收两个参数分别为request和exception
def err_handler(request,exception):
    print('发生异常,具体信息为:',exception)
url = 'https://www.not-ok.com'
req_list = [
    grequests.get(url),
    grequests.get(url),
    grequests.get(url),
]
start_time=time.time()
# 注意,err_handler在这里
res_list = grequests.map(req_list,exception_handler=err_handler)
end_time=time.time()
print(res_list,end_time-start_time)
复制代码


网络异常,图片无法展示
|


其他用法


网络异常,图片无法展示
|


通过源码我们了解到:


参数 解释
stream True 时,可以处理流文件(不会立即下载)。
size 流控参数,(指定并发量),如果不指定则不做限制。
exception_handler 自定义异常处理方法。
gtimeout gevent 的任务超时时间(所有任务)。


以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

相关文章
|
17天前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
26 3
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
164 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
173 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
2月前
使用Netty实现文件传输的HTTP服务器和客户端
本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
75 1
使用Netty实现文件传输的HTTP服务器和客户端
|
3月前
|
关系型数据库 MySQL Python
mysql之python客户端封装类
mysql之python客户端封装类
|
3月前
|
机器学习/深度学习 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
在数据驱动的时代,网络数据抓取对于数据分析、机器学习等至关重要。HTTP协议作为互联网通信的基石,其重要性不言而喻。Python的`requests`库凭借简洁的API和强大的功能,成为网络数据抓取的利器。本文将通过实战演练展示如何使用`requests`库进行数据抓取,包括发送GET/POST请求、处理JSON响应及添加自定义请求头等。首先,请确保已安装`requests`库,可通过`pip install requests`进行安装。接下来,我们将逐一介绍如何利用`requests`库探索网络世界,助你成为数据抓取大师。在实践过程中,务必遵守相关法律法规和网站使用条款,做到技术与道德并重。
57 2
|
3月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
76 3
|
3月前
|
数据采集 网络协议 API
HTTP协议大揭秘!Python requests库实战,让网络请求变得简单高效
【9月更文挑战第13天】在数字化时代,互联网成为信息传输的核心平台,HTTP协议作为基石,定义了客户端与服务器间的数据传输规则。直接处理HTTP请求复杂繁琐,但Python的`requests`库提供了一个简洁强大的接口,简化了这一过程。HTTP协议采用请求与响应模式,无状态且结构化设计,使其能灵活处理各种数据交换。
88 8
|
3月前
|
Python
HTTP协议不再是迷!Python网络请求实战,带你走进网络世界的奥秘
本文介绍了HTTP协议,它是互联网信息传递的核心。作为客户端与服务器通信的基础,HTTP请求包括请求行、头和体三部分。通过Python的`requests`库,我们可以轻松实现HTTP请求。本文将指导你安装`requests`库,并通过实战示例演示如何发送GET和POST请求。无论你是想获取网页内容还是提交表单数据,都能通过简单的代码实现。希望本文能帮助你在Python网络请求的道路上迈出坚实的一步。
71 0
|
4月前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!

热门文章

最新文章