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

Python requests模块如何避免Socket耗尽?.NET开发者求最佳实践

Python中使用requests处理大量HTTP请求的最佳实践(避免TIME_WAIT堆积)

作为.NET开发者,你熟悉的连接复用思路在Python的requests库中同样适用——核心目标就是减少频繁创建/销毁Socket连接,从而避免TIME_WAIT状态的Socket耗尽系统资源。以下是具体的最佳实践:

1. 核心方案:使用requests.Session()复用连接

requests.Session会维护一个内置的连接池,所有通过该会话发起的请求都会优先复用已建立的HTTP连接(基于HTTP Keep-Alive机制),不会每次请求都新建Socket。这和.NET中HttpClientFactory管理实例的核心逻辑一致。

示例代码:

import requests

# 初始化一个会话对象,所有请求复用连接池
with requests.Session() as session:
    # 短时间内发起大量请求
    for request_idx in range(1000):
        response = session.get("https://target-api.com/endpoint")
        # 处理响应逻辑(如解析JSON、状态码判断)
        if response.status_code == 200:
            data = response.json()

使用Session后,同一主机的请求会复用连接,大幅减少TIME_WAIT状态的Socket数量。

2. 自定义连接池参数优化性能

通过HTTPAdapter可以对连接池的大小、重试策略等进行精细化配置,适配高并发场景:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# 创建会话
session = requests.Session()

# 配置重试策略(可选,应对临时网络故障)
retry_strategy = Retry(
    total=3,  # 总重试次数
    backoff_factor=0.5,  # 重试间隔递增系数
    status_forcelist=[429, 500, 502, 503, 504]  # 需要重试的状态码
)

# 配置连接池参数
adapter = HTTPAdapter(
    max_retries=retry_strategy,
    pool_connections=50,  # 每个主机的最大连接数
    pool_maxsize=100,     # 连接池的总容量
    pool_block=False      # 连接池满时是否阻塞(False则抛出连接超时)
)

# 将适配器挂载到HTTP/HTTPS协议
session.mount("http://", adapter)
session.mount("https://", adapter)

# 发起批量请求
for _ in range(2000):
    response = session.get("https://target-api.com/endpoint")

关键参数说明:

  • pool_connections:针对单个目标主机的最大并发连接数
  • pool_maxsize:连接池能容纳的总连接数
  • pool_block:当连接池耗尽时,是否等待空闲连接(高并发场景建议设为False,避免阻塞)

3. 避免错误用法:不要循环创建新请求实例

绝对不要在循环内直接调用requests.get()/requests.post()——这种方式每次请求都会新建一个临时连接,请求结束后立即关闭,会产生大量TIME_WAIT状态的Socket,快速耗尽系统的可用Socket资源。

错误示例:

# 不推荐:每次请求新建连接
for _ in range(1000):
    requests.get("https://target-api.com/endpoint")  # 每次都会创建新Socket,用完进入TIME_WAIT

补充说明

即使使用连接池,当连接最终因闲置超时被关闭时,仍会进入TIME_WAIT状态,但由于连接被复用,产生的TIME_WAIT数量会大幅降低,不会触发系统Socket限制。这和.NET中HttpClient的连接管理逻辑本质一致。

内容的提问来源于stack exchange,提问作者Tobias von Falkenhayn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:43:16