requests.post 小坑: 默认无超时,会阻塞

2023-11-03

一、遇到问题

最近遇到一个小问题 : 发现我的进程在调某个 API 的时候,不能正常 work 了。

马上一顿 strace -p pid 操作,定睛一看,
发现我的进程卡在了 recvfrom(23) 不动了,一直不会进入 accept 或者 epoll_wait ,
没有请求响应,也不会有任何的报错。

这时候才想起被requests.post 坑了,这货默认是阻塞的,除非显式指定了 timeout 值,否则不会做超时处理。

二、显式指定超时和重试

配置 requests 在经过 timeout( s )之后停止等待响应,从而避免进程一直卡住:  

try:
   requests.adapters.DEFAULT_RETRIES = 2
   response = requests.post(url, data = body, headers = http_headers, timeout=5 )
except Exception as ee:
   LOGGER.error(ee)

如此配置后,客户端在 timeout 秒内从基础套接字上必须接收到第一个字节数据, 否则就会抛出超时异常,不会再卡住了。
这里为了尽力收到数据,加了一次重试。

三、timeout 细化控制

前面配置的 “timeout=5” ,这个值是作为 connect 和 read 二者共用的 timeout ,

可以采用元组方式对这种单值超时方式进行细化,从而支持分别设置连接和读取阶段的超时时间。

connect 连接超时
指的是客户端实现到远端服务器端口的连接时 request 所等待的时间。
连接超时一般设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口的默认大小是 3。
read 读取超时
指的客户端已经连接上服务器并且发送了 request 后,客户端等待服务器发送请求的时间。
一般指的是服务器发送第一个字节之前的时间。

元组配置方式,比如:

response = requests.post(url, data = body, headers = http_headers, timeout=(3, 1) )

元组 timeout=(3, 1) 内第一个值为连接超时时间,第二个值为读取超时时间:
 

本文转载自:https://blog.csdn.net/weixin_44648216/article/details/105796379

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

requests.post 小坑: 默认无超时,会阻塞 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • 上海交大ACM班C++算法与数据结构——数据结构之栈

    上海交大ACM班C 算法与数据结构 数据结构之栈 1 栈的定义 后进先出LIFO first in last out 先进后出FILO first in last out 的线性表 有关线性表可查看 上海交大ACM班C 算法与数据结构 数据
  • HTML ,CSS ,JS 组合运用制作登录界面,注册界面,相册旋转展示界面,并相互跳转联系,源代码

    完成 个人相册 项目登录页面 要求 1 使用正则表达式验证邮箱 2 密码长度至少为6位且为字母与数字的组合 可自行改变背景图片 此时所用图片与项目在同一目录下 只需写入文件名 图片要在与项目同级目录下 要写入路径及名称 登录界面所有代码如下
  • PHP学习之路——基本语法

    phpinfo是一个函数 功能 这个函数 功能 会显示一个当前电脑 服务器 的详细的PHP信息 我们写完一段代码 就需要在后面加分号 php的代码部份全部要用半角的英文 很多人容易写成全角的英文和符号造成PHP代码报错 PHP中的变量也是如
  • CPU乱序执行

    CPU乱序执行 CPU乱序执行是什么 例程 参考 总结 CPU乱序执行是什么 我们理解的程序是顺序执行的 其实是指在单个独立的进程中表现得像顺序运行的 而多处理器多线程共享内存系统是十分复杂的 需要约束这些复杂系统的行为 我们将程序线程共享
  • mavon-editor 使用及如何将html的数据转为markdown的数据问题

    1 安装mavon editor cnpm install mavon editor s 2 页面使用
  • Python通过smtplib发送邮件

    Python通过smtplib发送邮件 1 邮件发送的步骤 2 邮箱设置 3 发送一封qq邮件 4 发送HTML格式的邮件 5 发送带附件的邮件 6 在HTML文本中添加图片 7 python给同一个人发送多封邮件 8 python给不同的
  • 5.6.2_IEEE754

    文章目录 一 引子 二 移码 1 移码与补码 2 移码本身 1 127 2 3 3 偏置值 普通情况 特殊情况 三 IEEE 754标准 1 格式 2 类型 1 短浮点数 2 double型 3 案例 1 案例一 2 案例二 4 范围 1
  • unity下多层随机迷宫构建

    using System Collections using System Collections Generic using UnityEngine public class Maze MonoBehaviour public GameO
  • 【Android入门到项目实战-- 11.4】—— ExoPlayer视频播放器框架的详细使用

    目录 什么是ExoPlayer 一 基本使用 1 添加依赖项 2 布局 3 Activity 二 自定义播放暂停 1 首先如何隐藏默认的开始暂停和快进 2 自定义 三 控制视频画面旋转和比例调整 四 全屏放大和缩小 1 双击视频放大缩小 2
  • python 深度学习 解决遇到的报错问题

    目录 一 解决报错ModuleNotFoundError No module named tensorflow examples 二 解决报错ModuleNotFoundError No module named tensorflow co
  • node.js + 企业微信实现定时推送消息

    一 注册企业微信及配置 进入官网 https work weixin qq com 按要求填写资料开通企业微信 1 查看企业 ID 2 创建应用 3 查看应用 AgentId Secret 下拉到页面底部还要配置IP白名单 配置IP白名单
  • 睿瞳车牌识别测试总结

    摄像头型号 睿瞳科技 IVS 通讯 通过网线 功能 当有车牌识别时 将主动向IP 端口推送数据包 重要内容 准确率和车牌号 识别ID 配置 第一步 连接摄像头 默认 192 168 1 100 第二步 更改合适的IP 第三步 配置仪表网络推
  • VBA:同时修改工作薄中以日期命名的sheet名称

    修改逻辑如下 一个月的数据放在同一个工作薄中 每天的数据为一个sheet sheet名称为当天的日期 每天的数据模版一样 只是数据更新变化 现需要把上月的sheet名称日期改为当月的 只需要把月份改为当月月份 比如7 1 7 31改为8 1
  • 基于Flowable 6.x 的工作流管理平台源码 在线流程设计器 在线流程表单设

    基于Flowable 6 x 的工作流管理平台源码 在线流程设计器 在线流程表单设计器 单节点配置表单 多实例会签任务 任务节点配置任务 执行监听器 动态配置任务候选人 其它流程相关功能点
  • Unable to find resource t64.exe in package pip._vendor.distlib报错问题解决

    Unable to find resource t64 exe in package pip vendor distlib报错问题解决 问题报错具体内容 具体解决方案 解决方法一 解决方法二 问题报错具体内容 想要对python的版本进行一
  • win7下metasploit-framework安装及使用笔记

    1 去官网下载最新版本的metasploit framework 2 下载好后 退出电脑的杀毒软件 因为安装的时候里面好多文件会被当做病毒删除 3 点击安装 下一步下一步依次即可 4 安装完成后启动 这个启动的地方我找了好久 具体启动的地方
  • FPGA实现inout的两种方法

    第一种就是使用assign语句 这种会根据代码逻辑进行综合 也会综合成三态门 但不一定是使用IOBUF这种资源 assign a in or oout 1 dz out 第二种就是使用原语 以xilinx的IOBUF为例 OBUFT为一个三
  • 再聊聊财务自由

    前段时间有人在我星球讨论财务自由 说自由的本质是选择权 有读者觉得大受启发 我就翻了一下旧文 我2017年就说过了啊 谈谈财务自由 但时过境迁 其实我想改变一下之前的说法 所谓财务自由 你虽然拥有了选择权 但并不是无限选择的权力 坦白说 这
  • 电影知识图谱和基于模板的问答系统构建

    目录 前言 一 知识图谱的构建 二 问答系统的构建 1 数据准备 1 1数据获取 1 2数据处理 1 3数据读入 1 4代码 2 问答系统设计 2 1整体流程 2 2实体识别和问题分类 2 3 问题结果查询 2 4问答模板的匹配 三 优化方
  • requests.post 小坑: 默认无超时,会阻塞

    一 遇到问题 最近遇到一个小问题 发现我的进程在调某个 API 的时候 不能正常 work 了 马上一顿 strace p pid 操作 定睛一看 发现我的进程卡在了 recvfrom 23 不动了 一直不会进入 accept 或者 epo