python requests是什么_python requests 连接池

本文从WordPress迁移而来, 查看全部WordPress迁移文章

背景:要从内部的一个web api拉取数据,要请求大概15万次左右(15万个ID,每个ID请求一次)

特点:一个host(也可以以IP直接请求),ID是作为请求参数发过去的。

一开始是非常简单地使用 requests.get(“htttp://www.myapi.com”),也没发现多大的问题;

后来就出现了错误 (‘Connection aborted.’, error(99, ‘Cannot assign requested address’)),数量巨大

问一下搜索引擎这个错误的原因是什么,基本的说法就是:

客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”

看到这些解释的时候,一点都不冤枉,正好是我的请求,请求了15万次,每次请求都是短连接,很短时间结束;

netstat -an | grep TIME_WAIT 查看一下TIME_WAIT的情况,果然数量巨大,而且目的IP都是同一个(host的IP)。

然后在同学的指导下用了requests的连接池,确实也符合我的需求场景。我只向一个host发请求,变的只是请求参数,所以HTTP连接完全可以使用长连接;

也就是先向服务器建立好几十个连接(多一点应该问题也不大,我只建立了24个),在这些TCP连接上传输我们的HTTP报文。

最后的结果就是再没出现过上面的错误了,然后我们再用netstat看一下

netstat -an | grep host的IP

看到了 24条记录,都是 ESTABLISHED 状态;符合预期,就是那24条连接一直持续着

代码如下

1

2

3

4

5

6

7

8

9def __get_http_session(self, pool_connections, pool_maxsize, max_retries):

session = requests.Session()

# 创建一个适配器,连接池的数量pool_connections, 最大数量pool_maxsize, 失败重试的次数max_retries

adapter = requests.adapters.HTTPAdapter(pool_connections = pool_connections,

pool_maxsize = pool_maxsize, max_retries = max_retries)

# 告诉requests,http协议和https协议都使用这个适配器

session.mount('http://', adapter)

session.mount('https://', adapter)

return session

后续的使用也是很直接的,最简单的使用是 requests.get, requests.post, requests.head 等,这里我们就直接 session.get(), session.post(), session.head() 即可

session就是 __get_http_session() 返回的对象

后面同学又问了一个问题,这个问题是因为端口号用完而导致的,要是能修改内核,增加端口号行不行呢?而后同学马上又说了,这是不行的,因为且不说修改linux内核行不行,但TCP协议中是有字段来标识端口号的,16位,所以端口号最大只能到65535,这不是由操作系统决定的,是TCP协议决定的。

linux能修改的,是缩短TIME_WAIT的时间

这个连接池的用法适合这种背景,向一个host频繁发请求

但对于大量不同的host发请求,是没什么效果的,因为不可能建立长连接(不同host,一般IP都不同,连接是以源IP:源端口号,目的IP:目的端口号标识的)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7nmarm微架构鲲鹏服务器芯片,中国电信服务器集采:同方鲲鹏服务器拿下6000万元份额...

原标题:中国电信服务器集采:同方鲲鹏服务器拿下6000万元份额(全球TMT2021年4月9日讯)日前,中国电信(2021年)服务器集采项目招标的GPU型服务器中标候选人公示发布。其中,鲲鹏、海光等国产CPU服务器占比进一步提升,标志着…

机器人的工作原理,这是我见过最详细的解析!

来源:网络很多人一听到“机器人”这三个字脑中就会浮现“外形酷炫”、“功能强大”、“高端”等这些词,认为机器人就和科幻电影里的“终结者”一样高端炫酷。其实不然,在本文中,我们将探讨机器人学的基本概念,并了解机…

linux mint 图标主题_如何在 Linux Mint 中更换主题

一直以来,使用 Cinnamon 桌面环境的 Linux Mint 都是一种卓越的体验。这也是为何我喜爱 Linux Mint的主要原因之一。-- Its Foss(作者)一直以来,使用 Cinnamon 桌面环境的 Linux Mint 都是一种卓越的体验。这也是为何我喜爱 Linux…

服务器物品展示框刷物品,我的世界1period;11period;2展示框刷物品bug | 手游网游页游攻略大全...

发布时间:2017-09-25我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣的玩家不妨进来看看哦! 在一个rpg服务器玩 开小号召唤boss的时候发现的. ...标签:我的世界…

Nature:揭示人大脑类器官为何缺乏正常人脑特有的细胞亚型和复杂回路

来源:生物谷作为在实验室中通常利用人类干细胞培育出的大脑样组织三维球体,大脑类器官被吹捧为有潜力让科学家们在受控的实验室条件下研究大脑回路的形成。关于大脑类器官的讨论非常热闹,一些科学家认为它们将使得快速开发针对破坏性的脑部疾…

anaconda 怎么安装xlrd_Pyinstaller打包,文件太大了怎么办?

这是一个很长的故事,嫌长的直接看最后的结论事情经过上周接了个需求,写了个小工具给客户,他要求打包成exe文件,这当然不是什么难事。因为除了写Python的,绝大多数人电脑里都没有Python编译器,所以打包成exe…

2017.4.07 js 中的function 实现的方式

函数分为FD (函数定义),FE(函数表达式) ,函数构造器得到的函数(1) FD 的栗子:function getTaste(){ .......}解析器遇到上面的function关键字,会解析上面的代码为函数定义的情况,凡…

android checkbox 选中事件_使用Vue3.0新特性造轮子 WidgetUI3.0 (Checkbox复选框组件)

"title"标题示例代码:data [ { title: 新日小卫士二代, }, { title: 车子质量不合格, }, { title: 我买的骑士1号仪表台进水怎么回事?, }, { title: 风雅欧妮大灯高低调节, }]"title"标题和"desc"描…

服务器装系统用哪个好,服务器系统重装用哪个系统

服务器系统重装用哪个系统 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。重装裸金属服务器的操作系统。快速发放裸金属服务器支持…

2020图机器学习GNN的四大研究趋势

来源:专知【导读】以图神经网络为代表的图机器学习在近两年成为研究热点之一。近日,图机器学习专家 Sergei Ivanov 为我们解读了他总结出来的 2020 年图机器学习的四大热门趋势,包括图神经网络的理论理解、应用普及、应用、图嵌入框架&#x…

c++ 将文件内容输出到word上_原来PDF转Word可以这么简单,只需要一个键!办公起来真方便...

在职场办公中,我们经常接触到PDF文件,如果让你把PDF转换成Word,你还在束手无策吗?今天就来教你3种方法,如何将PDF转换成Word。01.复制粘贴法相信很多新手都只会【CtrlC/V】,虽然PDF文件不能直接被修改&…

python的类和实例_Python使用类和实例

我们可以使用类来模拟现实世界中的很多情景。类编写好后,你的大部分时间都将花在使用根据类创建的实例上。你需要执行的一个重要任务是修改实例的属性。你可以直接修改实例的属性,也可以编写方法以特定的方式进行修改。 Car类 下面来编写一个表示汽车的类…

iApp最新版无服务器多功能软件库源码

无需服务器的多功能软件库源码分享,仅需添加一个后台应用和一个文档即可 使用教程如下: 在浏览器中打开理想后台地址:http://apps.xiaofei.run/user/ 如果没有账号,请注册一个免费账号。 登录账号后,添加一个后台应…

二维数组求和 团队开发

题目:返回一个二维整数数组中最大联通子数组的和。 要求: 输入一个二维整形数组,数组里有正数也有负数。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 开发方式:团队开发 主要思路:二维连通数组求最大子数组,我…

rpc协议微服务器,RPC协议及实现方式(分布式微服务治理的核心)

分布式微服务治理的核心在于: 微服务和分布式(微服务框架)微服务的最优技术实现目前是: SpringBoot(RPC 框架)分布式的最优技术实现目前是: Thrift,Motan,Dubbo,Spring Cloud(Netflix OSS),Finagle,gRPCRPC 是什么RPC 的全称是 Remote Procedure Call ,是一种进程间…

2019年度全球工程前沿研究报告

来源:JAS自动化学报英文版1. 工程研究前沿1.1 Top 10 工程研究前沿发展态势信息与电子工程领域 Top 10 工程研究前沿涉及电子科学与技术、光学工程与技术、仪器科学与技术、信息与通信工程、计算机科学与技术、控制科学与技术等学科方向。其中,“面向光互…

python取数字第一位数_python基础:8.切片和缩进

0.前言如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负所望。谢谢!!!1.前提基…

python图像_Python图像处理库(PIL)

Python Imaging Library为您的python程序添加图像处理能力。这个库提供广泛的文件格式支持、高效的内部表示和相当强大的图像处理能力。 核心图像库是为快速访问几种基本像素格式图像设计的。它能为一般的图像处理工具提供一个可靠的基础。 这个Pythonic library可以 装载和保存…

在JS中如何判断所输入的是一个数、整数、正数、非数值?

1、判断是否为一个数字: Number(num)不为 NaN,说明为数字 2、 判断一个数为正数: var numprompt("请输入:");if(Number(num)>0){document.write("您输入的是一个正数!")…

怎么开通手机信息服务器,如何用手机建立网站

如何用手机建立网站 内容精选换一换本文以营销版网站配置为例,介绍如何通过云速建站服务快速创建一个网站。云速建站操作简单方便,只需四步,就可以轻松创建一个网站。建站流程开通网站:包括购买营销版站点、购买精美模板(可选)和安…