【Python模块】——request.request的重试问题

news2024/9/29 13:18:10

前言

在工作中,经常遇到调用request.request去返回某个网站报超时,并且报超时的内容不一样。一种是HTTPSConnectionPool(host='www.xxx.com', port=443): Read timed out. (read timeout=10);另一种是HTTPSConnectionPool(host='www.xxx.com', port=443): Max retries exceeded with url: /api/1/test (Caused by ConnectTimeoutError)。很显然,这是两种不同的超时报错。

超时详解

超时分类

超时可分为连接超时和读取超时两种。从requests.request源码可知,timeout支持浮点类型也支持元组。timeout=float(),表示在等待服务端返回数据前的等待时间;timeout=tuple(connect timeout, read timeout),前者指的是连接超时,后者是读取超时。连接超时是指客户端连接服务端等待时间超过设定值的超时;读取超时是指客户端连接到服务端,等待服务端请求返回的等待时间。

def request(method, url, **kwargs):
    """Constructs and sends a :class:`Request <Request>`.
	...
    :param timeout: (optional) How many seconds to wait for the server to send data
        before giving up, as a float, or a :ref:`(connect timeout, read
        timeout) <timeouts>` tuple.
    :type timeout: float or tuple
    """

本地flask服务

from flask import Flask
import time


app = Flask(__name__)

@app.route("/")
def index():
	print("congratulation coming this website")
    time.sleep(3)
    return "hello world"

if __name__ == '__main__':
    app.run("127.0.0.1", port=4444)

设置timeout=float

连接超时

import requests

host = "http://192.168.0.1:4444"

try:
    response = requests.get(host, timeout=3)
    print(response.status_code)

except ConnectionError as e:
    raise Exception(e)
except Exception as e:
    raise Exception(e)

本地连接192.168.0.1:4444,返回结果为HTTPConnectionPool(host='192.168.0.1', port=4444): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x106e47910>, 'Connection to 192.168.0.1 timed out. (connect timeout=3)'))。本地ping不通192.168.0.1这个ip,即无法连接。所以超过3s后,返回无法连接到这个ip

读取超时

import requests

host = "http://localhost:4444"

try:
    response = requests.get(host, timeout=3)
    print(response.status_code)

except ConnectionError as e:
    raise Exception(e)
except Exception as e:
    raise Exception(e)

返回结果为HTTPConnectionPool(host='localhost', port=4444): Read timed out. (read timeout=3)。这是因为本地flask服务设置time.sleep(3),服务端的日志已经打出congratulation coming this website,等待3s后再打印出127.0.0.1 - - [29/Sep/2024 10:32:47] "GET / HTTP/1.1" 200 -。这说明已经请求到服务端了,只是因为客户端从服务端读取相应数据超时了。

设置timeout=tuple

连接超时

import requests

host = "http://192.168.0.1:4444"

try:
    response = requests.get(host, timeout=(2.0,  3.0))
    print(response.status_code)

except ConnectionError as e:
    raise Exception(e)
except Exception as e:
    raise Exception(e)

返回结果为Exception: HTTPConnectionPool(host='192.168.0.1', port=4444): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x106233910>, 'Connection to 192.168.0.1 timed out. (connect timeout=2.0)'))

读取超时

import requests

host = "http://localhost:4444"

try:
    response = requests.get(host, timeout=(2.0, 3.0))
    print(response.status_code)

except ConnectionError as e:
    raise Exception(e)
except Exception as e:
    raise Exception(e)

返回结果为Exception: HTTPConnectionPool(host='localhost', port=4444): Read timed out. (read timeout=3.0)

如果将timeout改为(2.0, 4.0),响应结果为200,说明读取超时=4.0已生效

requests超时重试

import requests
import logging 

if "__name__" == "__main__":
	s = requests.Session()
    s.mount("http://", HTTPAdapter(max_retries=3))
    s.mount("https://", HTTPAdapter(max_retries=3))
    try:
        r = requests.get(url, timeout=(2.0, 3.0))
        if r.status_code == 200:
            return r.json().get('configurations')
        time.sleep(3)
    except Exception as e:
        logging.error(e)

参考资料

https://www.cnblogs.com/gl1573/p/10129382.html

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

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

相关文章

日志的艺术:深入理解 spdlog

目录 1. 为什么需要日志&#xff1f; 2. 同步日志 vs. 异步日志 3. spdlog 的核心组成部分 4. 如何创建一个Logger 5. 如何选择输出目标&#xff08;Sink&#xff09; 6. 个性化你的日志格式 7. 异步日志的魔法 8. 刷新策略&#xff1a;何时将日志写入 9. 调整线程池&…

强化学习入门——Pybullet初体验

Pybullet 最近一直在想如何进行RL的学习&#xff0c;在学习RL的过程中&#xff0c;好的模拟仿真平台是非常重要的。除了Gym&#xff0c;还了解到Pybullet模块可以简便快捷地创建仿真环境&#xff0c;所以学习一下。 1.简介 PyBullet 是一个用于机器人学、游戏开发和图形研究…

mycat读写分离中间件

5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下&#xff0c;并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…

PyQt5与Html的关于地图位置显示的动态交互

PyQt5与Html的关于地图位置显示的动态交互 1 前言2 python部分3 HTML代码4 注意总结 1 前言 上篇本是放弃关于Folium的动态显示&#xff0c;但是在仔细对比Folium在python的直接应用与Html中的写法&#xff0c;其实两者没有什么区别&#xff0c;都是基于Leaflet上建立区域&…

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究

[大语言模型-论文精读] 词性对抗性攻击&#xff1a;文本到图像生成的实证研究 目录 文章目录 [大语言模型-论文精读] 词性对抗性攻击&#xff1a;文本到图像生成的实证研究目录文章研究背景 文章标题摘要1 引言2 相关工作3 数据集创建3.1 数据收集3.2 目标提示生成3.3 数据集注…

[ACS_C]:以 H2和 O2等离子体处理的 Al2O3为载体的 Pt 催化剂用于液态有机氢载体对二苄基甲苯和全氢二苄基甲苯的加氢和脱氢

摘要&#xff1a;二苄基甲苯 (DBT) 是一种很有前途的液态有机氢载体 (LOHC)&#xff0c;理论储氢量为 6.2 wt%&#xff0c;可与可再生能源发电系统耦合。本工作采用一种方便、环保的等离子体处理方法改性氧化铝表面羟基和表面氧空位 (SOV)。通过浸渍处理后的氧化铝制备了不同的…

如何修复变砖的手机并恢复丢失的数据

您可能之前听说过“变砖”&#xff0c;但您知道什么是变砖手机吗&#xff1f;正如许多论坛中经常提出的问题一样&#xff0c;我如何知道我的手机是否变砖了&#xff1f;好吧&#xff0c;手机变砖主要有两种类型&#xff0c;即软件变砖和硬变砖。软变砖手机意味着重启后您仍然可…

MATLAB guide选择图片和全局变量使用

文章目录 前言一、按键选取文件二、全局化变量使用全局华使用 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、按键选取文件 [filename,pathname]…

想要编辑 PDF 文件?使用这 10 种最佳 PDF 编辑工具

您是否遇到过利益干系人要求您对 PDF 文件进行细微更改的情况&#xff1f; 通常我们会这样做&#xff01; 但是&#xff0c;对你来说&#xff0c;做出要求的改变有多难呢&#xff1f; 好吧&#xff0c;当您没有用于创建 PDF 文件的源文件时&#xff0c;问题就来了。是的&…

如何选购适合自己的内衣洗衣机?五款热门卓越型号测评推荐

相信不少小伙伴都跟我一样&#xff0c;一方面&#xff0c;认为内裤、袜子与大件的上衣、裤子放一块清洗&#xff0c;会感觉很不卫生&#xff0c;而且穿在身上也不安心。但是另一方面&#xff0c;本身又很懒惰&#xff0c;也不想自己用手洗&#xff0c;不但经常会遗漏一些污渍&a…

探索 DaPy:Python 中的 AI 数据处理新贵

文章目录 探索 DaPy&#xff1a;Python 中的 AI 数据处理新贵背景介绍DaPy 是什么&#xff1f;如何安装 DaPy&#xff1f;DaPy 的简单函数使用方法加载数据数据筛选数据聚合数据可视化自定义函数 DaPy 在实际场景中的应用数据预处理数据分析数据处理与集成 常见 Bug 及解决方案…

蓝牙资讯|2024可穿戴市场的手表将出现下滑,耳机和戒指将增长

市场调查机构 IDC 发布博文&#xff0c;预测 2024 年全球可穿戴设备出货量达到 5.379 亿台&#xff0c;同比增长 6.1%。IDC 预计新兴市场的进一步普及和成熟市场的更新周期的开始将推动听力设备的发展&#xff0c;因为消费者希望更换大流行病时期购买的产品。 IDC 预估 2024 …

VS2017安装Installer Projects制作Setup包

下载安装扩展包 VS2017默认未安装Installer Projects Package&#xff0c;需要联机下载&#xff1a; 也可网页上下载离线InstallerProjects.vsix文件&#xff1a; https://visualstudioclient.gallerycdn.vsassets.io/extensions/visualstudioclient/microsoftvisualstudio20…

Spring Boot 进阶-Spring Boot 如何实现自定义的过滤器详解

在上一篇文章中我们讲解了关于拦截器的相关内容,并且通过一个防抖的例子来讲解了拦截器在实际开发中的使用。这篇文章我们为大家带来的就是关于过滤器的相关内容的分享。下面我们首先来介绍一下什么是过滤器。 什么是过滤器? 过滤器Filter,是Servlet技术中最常用的技术,开…

K8S精进之路-控制器DaemonSet -(3)

介绍 DaemonSet就是让一个节点上只能运行一个Daemonset Pod应用&#xff0c;每个节点就只有一个。比如最常用的网络组件&#xff0c;存储插件&#xff0c;日志插件&#xff0c;监控插件就是这种类型的pod.如果集群中有新的节点加入&#xff0c;DaemonSet也会在新的节点创建出来…

【Router】路由功能之DMZ(Demilitarized Zone)功能介绍及实现

DMZ&#xff08;Demilitarized Zone&#xff09; DMZ&#xff08;非军事化区域&#xff09;是一个位于内部网络和外部网络之间的分段区域。在一个网络中&#xff0c;DMZ通常包含运行公共服务的服务器或其他设备。 DMZ是一个位于内部网络和外部网络之间的分段区域&#xff0c;用…

wpa_cli支持EAP-TLS认证运行设计

wpa_cli支持EAP-TLS认证运行设计 1 输入 1.1启动wpa_supplicant 和 wpa_cli 在OpenHarmony开发板或华为开发机的命令行中输入 wpa_supplicant -Dnl80211 -c/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf -gabstract:/data/service/el1/public/wifi/sock…

【笔记】Java 栈 java.util.Stack

目标:了解Java编程语言里栈和队列是什么样的。 概念 在Java中,Stack 类表示一个后进先出(LIFO,Last-In-First-Out)的对象栈。它继承自 Vector 类,并提供了五个操作,允许将向量(Vector)视为栈来处理。这些操作包括常用的: 压栈(push)出栈(pop)操作用于查看栈顶元…

物理加密机的高性能操作

物理加密机&#xff0c;也被称为硬件安全模块(HSM)或加密锁&#xff0c;是一种用于保护敏感数据和软件应用的物理设备。以下是关于物理加密机的详细介绍&#xff1a; 一、定义与功能 物理加密机通过提供强大的加密功能和访问控制&#xff0c;确保数据在存储、处理和传输过程中的…

GIS--为研究区准备数据

一、实验目的 掌握空间数据的分幅组织方法&#xff0c;掌握常用的空间数据处理技术 二、实验内容 计算图幅号&#xff1b;空间配准、投影定义、投影转换&#xff1b;拼接、裁切&#xff0c;获取研究区内的土地利用数据 三、实验原理与方法 实验原理&#xff1a;空间数据组…