当前位置: 首页 > 面试题库 >

Python请求使用Keep-alive加快速度

冯卜鹰
2023-03-14
问题内容

在HTTP协议中,您可以使用keep-
alive在一个套接字中发送许多请求,然后立即接收来自服务器的响应,这样可以大大加快整个过程。有什么办法可以在python请求库中做到这一点吗?还是有其他方法可以使用请求库来加快速度呢?


问题答案:

就在这里。使用requests.Session,默认情况下它将保持活动状态。

我想我应该举一个简单的例子:

import logging
import requests

logging.basicConfig(level=logging.DEBUG)
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
s.get('http://httpbin.org/cookies/set/anothercookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

您将注意到这些日志消息发生

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/sessioncookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 55
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/anothercookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

如果您稍等片刻,然后重复上一次get通话

INFO:requests.packages.urllib3.connectionpool:Resetting dropped connection: httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

请注意,它将重置断开的连接,即重新建立与服务器的连接以发出新请求。



 类似资料:
  • 非标准 这个功能是非标准的,不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且行为在未来可能会发生变化。 Keep-Alive一般报头允许发送者提示关于如何连接,并且可以被用于设置超时时间,并且请求的最大数量。 Connection头需要被设置为“保活”这个标题有任何意义。此外,Connection和Keep-Alive在 HTTP

  • Props: include - 字符串或正则表达式。只有匹配的组件会被缓存。 exclude - 字符串或正则表达式。任何匹配的组件都不会被缓存。 用法: <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。 当组件在 <keep-

  • 然而我这样做,似乎并不奏效: 您知道如何使DefaultHttpClient使用TCP保持活动策略吗?

  • 本文向大家介绍vue keep-alive请求数据的方法示例,包括了vue keep-alive请求数据的方法示例的使用技巧和注意事项,需要的朋友参考一下 背景 index页面:首页品牌入口 list页面:商品列表页面 product页面:商品详情页面 从index页面进入list的时候要刷新页面,从product页面返回list的时候不需要刷新页面,所以list使用了keep-alive的属性,

  • 问题内容: 继续我提出的问题”如何实现ExecutorService以基于轮换的方式执行任务?”),我试图在我的代码库中使用ThreadPoolExecutor。即使反复尝试从Java API文档中了解,我仍然无法清楚地理解要在构造函数中传递的参数的功能/目的。希望有人可以通过一些很好的例子向我解释。 Java文档摘录: - 当线程数大于内核数时,这是多余的空闲线程将在终止之前等待新任务的最长时间

  • 我使用请求一组URL。大多数URL属于相同的主机。似乎会为每个URL创建一个全新的TCP连接,即使已经为上一个URL建立了到主机的连接。当数百个连接同时建立时,一些服务器会丢弃新的连接或开始缓慢响应。 代码示例: 在日志中,我看到同一个远程主机的本地端口不同,活动和非活动连接的总和远远高于不同主机的数量。这就是为什么我认为没有重用已经建立的连接。 是否可以使用HTTP客户端通过与主机的同一TCP连