Python中有许多HTTP客户端,但使用最广泛且最容易的是requests
前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:北京尚脑软件测试
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
持续连接
持续连接是自HTTP 1.1以来的标准,尽管许多应用程序并未使用它们。以简单模式使用请求时(例如使用get函数),连接会在返回时关闭,Session对象允许重用已经打开的连接。
每个连接都存储在连接池中(默认为10)
重用TCP连接有许多性能优势:
- 降低CPU和内存使用率(同时打开的连接较少)。
- 减少了后续请求中的延迟(无TCP握手)。
- 可以引发异常而不会关闭TCP连接。
HTTP协议还提供了流水线,流水线化允许在同一连接上发送多个请求,而无需等待答复(批处理)。不幸的是,请求库不支持此功能。但是,流水线请求可能不如并行发送它们那么快。实际上,HTTP 1.1协议强制以与发送请求相同的顺序发送答复-先进先出。
并行
requests的主要缺点是同步的。调用requests.get("http://example.org")会阻塞程序,直到HTTP服务器完全答复为止。可以通过使用并发线程提供的线程池来缓解此问题。它允许以非常快速的方式并行化HTTP请求。
也可以借助requests-futures的库:
来自requests_futures导入会话
在请求中使用期货
默认情况下,创建具有两个线程的工作程序,但是程序可以通过将max_workers参数甚至是自己的执行程序传递给FuturSession对象来轻松自定义此值,例如:FuturesSession(executor=ThreadPoolExecutor(max_workers=10))。
异步
如前所述,请求是完全同步的。这会在等待服务器回复时阻止应用程序,从而降低程序速度。在线程中发出HTTP请求是一种解决方案,但是线程确实有其自身的开销,这暗示着并行性,这并不是每个人总是很高兴在程序中看到的东西。
从版本3.5开始,Python使用异步将异步作为其核心。aiohttp库提供了一个基于asyncio之上的异步HTTP客户端。该库允许按顺序发送请求,但无需等待答复回来再发送新请求。与HTTP流水形成对比,aiohttp通过多个连接并行发送请求,避免了前面解释的排序问题。
所有这些解决方案都提供了不同的方法来提高HTTP客户端的速度。
性能
下面的代码向HTTPbin.org发送请求。本示例实现了上面列出的所有技术并对它们进行计时。
运行此程序将给出以下输出:
Streaming
另一个有效的速度优化是流式传输请求。发出请求时,默认情况下会立即下载响应的正文。请求库提供的流参数或aiohttp的content属性都提供了一种在执行请求后不立即将全部内容加载到内存中的方法。
用aiohttp流
为了避免无用地分配可能的数百兆内存,不加载全部内容非常重要。如果您的程序不需要整体访问整个内容,而是可以处理块,那么最好使用这些方法。例如,如果您要保存内容并将其写入文件,则仅读取一个块并同时写入它将比读取整个HTTP正文(分配大量的内存)具有更高的内存效率。然后将其写入磁盘。
2020年最新Python教程:
如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?
说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。
以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!
获取方式,私信小编 “ 资料 ”,即可免费获取哦!
最新文章
- block使用小结、在arc中使用block、如何防止循环引用
- vs快捷方式
- [必会] 表单验证+弹框~老司机原生js
- 如何使Android应用开机时自动启动
- 微软为Visual Studio开发助手拓展C++支持
- 资源文件assets和 res下面raw文件的使用不同点
- axis2 部署webservice
- zabbix语言设置
- 出现Deprecated: Function ereg_replace() is deprecated in 的原因及解决方法
- 360随身wifi无法使用临时解决方案大全
- 清除cookie
- Django url
- node重新加载模块
- 理解MySql的锁&;事务隔离级别
- bzoj3237 cdq分治+可撤销并查集
- python dict的函数
- Windows 聆听 简单使用体验
- BZOJ2178 圆的面积并(simpson积分)
- 平时在PHP编码时有没有注意到这些问题
- LeetCode(21):合并两个有序链表
热门文章
- 题解 P4344 【[SHOI2015]脑洞治疗仪】
- Java ServerSocket详解
- 进制-Adding Two Negabinary Numbers
- 使用Promethus+Grafana监控Mongodb
- 构建安全可靠的微服务 | Nacos 在颜铺 SaaS 平台的应用实践
- VBScript - 动态 Array 实现方法大全!
- WeChat-SmallProgram:自定义select下拉选项框组件
- python文件封装成*.exe
- GitHub 运用实战入门,奶妈级教学
- SSM项目依赖,spring5.1.9