python请求模块和连接重用 [英] python requests module and connection reuse

查看:21
本文介绍了python请求模块和连接重用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 python 的请求模块进行 HTTP 通信,我想知道如何重用已经建立的 TCP 连接?requests 模块是无状态的,如果我对同一个 URL 重复调用 get,它不是每次都会创建一个新连接吗?

I am working with python's requests module for HTTP communication, and I am wondering how to reuse already-established TCP connections? The requests module is stateless and if I repeatedly call get for the same URL, wouldn't it create a new connection each time?

谢谢!!

推荐答案

请求模块是无状态的,如果我对同一个 URL 重复调用 get,它不会每次都创建一个新连接吗?

The requests module is stateless and if I repeatedly call get for the same URL, wouldnt it create a new connection each time?

requests 模块不是无状态的;它只是让您忽略状态并有效地使用全局单例状态(如果您选择这样做).*

The requests module is not stateless; it just lets you ignore the state and effectively use a global singleton state if you choose to do so.*

而且它(或者,更确切地说,底层库之一,urllib3)维护一个由(主机名,端口)对键控的连接池,因此如果可以,它通常会神奇地重用连接.

And it (or, rather, one of the underlying libraries, urllib3) maintains a connection pool keyed by (hostname, port) pair, so it will usually just magically reuse a connection if it can.

正如文档所说:

好消息——多亏了 urllib3,keep-alive 是 100% 自动的在一个会话中!您在会话中提出的任何请求都将自动重用合适的连接!

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!

请注意,连接只会释放回池以供重用一旦读取了所有主体数据;确保将 stream 设置为False 或读取 Response 对象的 content 属性.

Note that connections are only released back to the pool for reuse once all body data has been read; be sure to either set stream to False or read the content property of the Response object.

那么,如果可以的话"是什么意思?正如上面的文档所暗示的那样,如果您保持流式响应对象处于活动状态,则它们的连接显然无法重用.

So, what does "if it can" mean? As the docs above imply, if you're keeping streaming response objects alive, their connections obviously can't be reused.

此外,连接池实际上是一个有限的缓存,而不是无限的,因此如果您发送大量连接并且其中两个连接到同一台服务器,您将不会总是重用连接,只是经常.但通常,这就是您真正想要的.

Also, the connection pool is really a finite cache, not infinite, so if you spam out a ton of connections and two of them are to the same server, you won't always reuse the connection, just often. But usually, that's what you actually want.

* 此处相关的特定状态是 传输适配器.每个会话都有一个传输适配器.您可以手动指定适配器,也可以指定全局默认值,或者您可以只使用默认的全局默认值,它基本上只是封装了一个 urllib3.PoolManager 来管理其 HTTP 连接.有关更多信息,请阅读文档.

* The particular state relevant here is the transport adapter. Each session gets a transport adapter. You can specify the adapter manually, or you can specify a global default, or you can just use the default global default, which basically just wraps up a urllib3.PoolManager for managing its HTTP connections. For more information, read the docs.

这篇关于python请求模块和连接重用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆