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

实现单例模式后异步爬虫服务代码执行效率大幅下降的问题求助

实现单例模式后异步爬虫服务代码执行效率大幅下降的问题求助

各位大佬好,我最近碰到个棘手的问题,想请大家帮忙分析下!

先说明下背景:下面这段代码是我从线上生产环境里摘出来的核心片段,为了复现遇到的问题,我做了少量改动。原本这个爬虫服务运行得好好的,但自从我把ServiceCrawler改成单例模式之后,整体执行效率直接大幅下降,并发能力变得很差。

我怀疑是不是限流器或者异步HTTP客户端在单例模式下出了什么问题?先贴出核心代码:

from aiolimiter import AsyncLimiter
 
class ServiceCrawler:
    def __init__(self, access_token, ratelimit: int = 0) -> None:
        self.base_url = "https://app.myservice.com/api/"
        self.http_client = httpx.AsyncClient(http2=True, timeout=None, verify=False)
        self.ratelimit = AsyncLimiter(ratelimit, 30)
        self.access_token = access_token

    async def async_http_request(
        self, 
        url: str, 
        method: Http_Methods=Http_Methods.GET,
        payload: json = None, 
        data: json = None
    ) -> json:
        
        headers = {}
        if len(self.access_token) > 0:
            headers['Authorization'] = f'Bearer {self.access_token}'

        try:
            async with self.ratelimit:
                match method:
                    case Http_Methods.GET:
                        # 省略GET请求逻辑
                        ...
                    # 省略其他请求方法的处理逻辑
        except Exception as e:
            # 省略异常处理逻辑
            ...

具体表现就是,改成单例后,所有的异步请求好像都在排队等待限流器的许可,哪怕我设置的ratelimit值并不低。之前非单例的时候,多个实例各自处理请求,效率完全正常,现在单例模式下完全达不到预期的并发效果。

有没有大佬能帮我指出问题所在,或者给点排查的方向?万分感谢!

备注:内容来源于stack exchange,提问作者Henry The Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:38:11