一日一技:大幅度提高requests的访问速度

简介: 一日一技:大幅度提高requests的访问速度

摄影:产品经理与产品经理环游世界

我做了一个垃圾信息过滤的 HTTP 接口。现在有一千万条消息需要经过这个接口进行垃圾检测。

一开始我的代码是这样的:

import requests
messages = ['第一条', '第二条', '第三条']
for message in messages:
    resp = requests.post(url, json={'msg': message}).json()
    if resp['trash']:
        print('是垃圾消息')

我们写一段代码来看看运行速度:

访问一百次百度,竟然需要 20 秒。那我有一千万条信息,这个时间太长了。

有没有什么加速的办法呢?除了我们之前文章讲到的 多线程、aiohttp 或者干脆用 Scrapy 外,还可以让 requests 保持连接从而减少频繁进行 TCP 三次握手的时间消耗。

那么要如何让 requests 保持连接呢?实际上非常简单,使用Session对象即可。

修改后的代码:

import requests
import time
start = time.time()
session = requests.Session()
for _ in range(100):
    resp = session.get('https://baidu.com').content.decode()
end = time.time()
print(f'访问一百次网页,耗时:{end - start}')

运行效果如下图所示:

性能得到了显著提升。访问 100 页只需要 5 秒钟。

官方文档[1]中,requests 也说到了 Session对象能够保持连接:

The Session object allows you to persist certain parameters across requests. It also persists cookies across all requests made from the Session instance, and will use urllib3’s connection pooling. So if you’re making several requests to the same host, the underlying TCP connection will be reused, which can result in a significant performance increase (see HTTP persistent connection).

Excellent news — thanks to urllib3, keep-alive is 100% automatic within a session! Any requests that you make within a session will automatically reuse the appropriate connection!

目录
相关文章
|
存储 供应链 监控
做了那么多架构,你真的懂 SOA 了吗?
如何统一看待和区别分层架构、微服务架构、分布式架构等主流架构?什么是 SOA?我们采用 SOA 的目的是什么?什么是服务化的本质?如何设计服务以及服务化架构呢?阿里高级技术专家程彦分享他对面向服务架构的一些看法,并给出相关的步骤和方案,较长,同学们可收藏后再看。
4005 0
做了那么多架构,你真的懂 SOA 了吗?
|
11月前
|
机器学习/深度学习 前端开发 JavaScript
WebAssembly:让前端性能突破极限的秘密武器
WebAssembly(简称 WASM)作为前端开发的性能加速器,能够让代码像 C++ 一样在浏览器中高速运行,突破了 JavaScript 的性能瓶颈。本文详细介绍了 WebAssembly 的概念、工作原理以及其在前端性能提升中的关键作用。通过与 JavaScript 的配合,WASM 让复杂运算如图像处理、3D 渲染、机器学习等在浏览器中流畅运行。文章还探讨了如何逐步集成 WASM,展示其在网页游戏、高计算任务中的实际应用。WebAssembly 为前端开发者提供了新的可能性,是提升网页性能、优化用户体验的关键工具。
5161 2
WebAssembly:让前端性能突破极限的秘密武器
|
8月前
|
Dart 前端开发 架构师
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
430 26
|
2月前
|
Web App开发 Linux API
模拟微信内置浏览器,微信UA生成器,支持指纹代理IP
该实现包含完整的微信浏览器模拟功能,支持UA生成、指纹伪装和代理IP管理。使用时需要安装sele
|
数据采集 存储 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
在现代Web开发中,数据采集尤为重要,尤其在财经领域。本文以“东财股吧”为例,介绍如何使用Puppeteer结合代理IP技术进行高效的数据抓取。Puppeteer是一个强大的Node.js库,支持无头浏览器操作,适用于复杂的数据采集任务。通过设置代理IP、User-Agent及Cookies,可显著提升抓取成功率与效率,并以示例代码展示具体实现过程,为数据分析提供有力支持。
482 2
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
6月前
|
小程序 Java 关系型数据库
weixin030英语学习交流平台小程序+ssm(文档+源码)_kaic
本文介绍了英语学习交流平台小程序的开发全过程,包括系统分析、设计与实现。该小程序基于Java的SSM框架进行后端管理开发,使用MySQL作为数据库,并借助微信开发者工具确保系统稳定性。小程序设有管理员和用户两个角色,功能涵盖个人中心、每日打卡、学习计划、论坛交流等,具有操作简单、界面清晰、功能齐全的特点。通过技术可行性、经济可行性和操作可行性分析,证明了系统的实用性和高效性,为英语学习者提供了一个便捷的交流平台。
|
11月前
|
机器学习/深度学习 搜索推荐 算法
机器学习-点击率预估-论文速读-20240916
机器学习-点击率预估-论文速读-20240916
153 0
|
消息中间件 Java API
Java一分钟之-JMS:Java消息服务
【6月更文挑战第11天】Java消息服务(JMS)是企业应用中实现组件解耦和异步通信的标准API。它包含点对点(P2P)和发布/订阅(Pub/Sub)两种消息模型。常见问题包括混淆消息模型、忽略事务管理和资源泄露。解决方法包括明确业务需求选择模型、使用事务确保消息可靠性以及正确关闭资源。文中提供了使用ActiveMQ的P2P模型的生产者和消费者代码示例,强调理解基础概念、避免问题以及实践是使用JMS的关键。
476 2
|
域名解析 缓存 网络协议
Python中使用`requests`库连接池与性能优化技术
【4月更文挑战第12天】在Python的网络编程中,`requests`库因其简洁易用的API和强大的功能而备受欢迎。然而,在高并发或大量请求的场景下,直接使用`requests`发送请求可能会导致性能瓶颈。为了解决这个问题,我们可以利用`requests`库提供的连接池(Connection Pooling)机制,以及采取一些性能优化措施,来提升请求的处理效率和稳定性。
1277 1
|
IDE 开发工具 Python
【Python】已解决:pip安装第三方模块(库)与PyCharm中不同步的问题(PyCharm添加本地python解释器)
【Python】已解决:pip安装第三方模块(库)与PyCharm中不同步的问题(PyCharm添加本地python解释器)
2701 0