实现单例模式后异步爬虫服务代码执行效率大幅下降的问题求助
实现单例模式后异步爬虫服务代码执行效率大幅下降的问题求助
各位大佬好,我最近碰到个棘手的问题,想请大家帮忙分析下!
先说明下背景:下面这段代码是我从线上生产环境里摘出来的核心片段,为了复现遇到的问题,我做了少量改动。原本这个爬虫服务运行得好好的,但自从我把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
相关产品推荐
相关产品推荐

