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

如何子类化requests.Session实现请求数达标后自动重启会话

问题核心

你原来的代码问题在于:方法内对self直接赋值仅会修改当前作用域的局部变量,不会影响外部持有的原有实例对象,自然也无法同步更新实例属性状态。

解决方案

不需要创建新的Session实例,直接重置当前实例的所有会话状态即可,同时我们可以把计数逻辑放到更底层的request方法中,适配所有HTTP请求类型,不用单独重写get/post等每个方法。

修正后的完整代码:

import requests
import time

class Session(requests.Session):
    # 请求计数阈值,可按需调整
    request_count_limit = 50
    # 重置会话后的休眠时间,可按需调整
    restart_sleep_time = 30

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request_count = 0
    
    def request(self, method, url, **kwargs):
        # 达到阈值时重置当前会话
        if self.request_count >= self.request_count_limit:
            print(f'请求数达到阈值,重置会话,休眠{self.restart_sleep_time}秒...')
            time.sleep(self.restart_sleep_time)
            # 重新初始化父类,清空cookies、连接池等所有会话状态,和新建实例效果一致
            super().__init__()
            # 重置计数器
            self.request_count = 0
        
        response = super().request(method, url, **kwargs)
        self.request_count += 1
        return response

使用方法

和原生requests.Session完全一致,直接实例化调用即可,自动处理计数、重置、休眠逻辑:

s = Session()
resp = s.get("https://example.com")
# 后续所有get/post/put等请求都会自动触发限流逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:48:03