Python中正确设置请求超时需区分connect与read超时:connect控制建连(DNS、握手),read控制响应接收;推荐显式使用元组如timeout=(2,8),避免timeout=0或None,并结合Retry实现指数退避重试。
Python 中正确设置请求超时,关键在于区分连接超时(connect timeout)和读取超时(read timeout),并根据实际场景合理组合使用。requests 库默认不设超时,若服务响应慢或网络异常,程序可能无限等待,导致阻塞或资源耗尽。
connect 超时控制的是建

直接写 timeout=0 会触发 socket 错误;用 timeout=-1 或 None 代表无限制,与预期“立即失败”相反。另外,把整个 timeout 设得过大(如 60 秒)而没拆分,容易掩盖建连慢的真实问题。
requests.get(url, timeout=0) —— 报错 OSErrorrequests.get(url, timeout=None) —— 等同于永不超时requests.get(url, timeout=(2, 8))
单次超时只能防止卡死,但网络抖动或临时性故障需要自动重试。建议用 urllib3.util.Retry 配合 requests.Session,避免手动轮询。
内部 API 调用可设短些(如 (1, 3)),公网第三方接口建议放宽(如 (3, 15)),文件下载类操作需延长 read 超时,并考虑流式处理 + 分块读取。