You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests模块设置超时参数后仍长时间卡住无响应问题咨询

问题根因说明

  • 首先排查代码笔误:你给出的代码片段中,定义的超时变量名为timeout_respose_factor,但requests.get传参时使用的是未定义的timeout_response,如果实际运行代码存在该问题,会触发requests默认的无超时逻辑,直接导致请求无限等待。
  • requests内置timeout参数的设计逻辑限制:你传入的timeout=(timeout_connect, timeout_response)中,第二个参数是读取间隔超时,指两次收到服务器响应数据的最大间隔,不是整个请求的总耗时阈值。如果亚马逊服务端针对可疑请求故意以极慢速度返回数据(比如每15秒返回1个字节,低于你设置的20秒读取超时阈值),就永远不会触发内置超时,导致线程卡住数小时。

解决方案

1. 修正基础配置

先修正变量名错误,保证读取超时参数正常生效,同时可以适当降低读取超时阈值,降低被慢响应挂住的概率。

2. 实现请求总时长控制

最稳妥的方案是通过线程池的超时能力做外层兜底,不管请求内部逻辑是否卡住,超过总时长阈值直接终止等待,走后续逻辑,示例代码如下:

from concurrent.futures import ThreadPoolExecutor, TimeoutError
import requests

# 封装请求逻辑
def amazon_fetch(url, headers):
    timeout_connect = 10
    timeout_response = 20
    try:
        return requests.get(
            url,
            headers=headers,
            timeout=(timeout_connect, timeout_response),
            verify=False
        )
    except Exception:
        return None

# 调用侧加总超时兜底,这里设置总请求时长最多60秒
with ThreadPoolExecutor(max_workers=1) as executor:
    future = executor.submit(amazon_fetch, your_url, your_headers)
    try:
        resp = future.result(timeout=60)
    except TimeoutError:
        # 超时直接跳过,无需等待请求返回
        resp = None

3. 额外优化建议

  • 亚马逊会针对可疑爬虫请求故意返回慢响应消耗资源,建议搭配代理池、UA轮换策略使用,降低被识别的概率。
  • 也可以替换HTTP客户端为支持总超时配置的库,直接在请求层设置总耗时阈值,无需额外做外层控制。

内容的提问来源于stack exchange,提问作者Tushar Seth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:54:05