8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Python:添加单例实现会大大减慢异步代码的执行速度

Harith 3月前

24 0

请欣赏下面的代码是今天生产中的代码的摘录,因此已经做了修改以引入遇到的问题。从 aiolimiter 导入 AsyncLimiter 类

请理解,下面的代码是今天生产中的代码的摘录,因此已经进行了修改以介绍遇到的问题。

from aiolimiter import AsyncLimiter
 
class ServiceCrawler:
    def __init__(self, ratelimit: int = 0) -> None:
        self.base_url = "https://app.myservice.com/api/"
        self.http_client = HTTPClient(self._access_token, ratelimit)
        self._ratelimit = AsyncLimiter(ratelimit, 30)

    async def get_something(): ...
    async def get_something_else(): ...

上述类是一个专门为查询内部 API 而构建的对象,旨在以异步模式工作。

就目前情况而言,我有外部例程创建一组协同程序来启动我的内部方法并处理数据。每个请求都会创建一个新的 ServiceCrawler 对象,我认为用 Singleton 模式封装它会很好。是否使用元类、全局变量来执行此操作......这是一个不同的故事。

在使用了不同的方法后,我发现没有带来任何好处,事实上执行效果大幅下降,这是我无法理解的。

举例来说,使用全局变量的以下实现。

def __init__(self, ratelimit: int = 0) -> None:
        self.base_url = "https://app.myservice.com/api/"
        self.http_client = HTTPClient(self._access_token, ratelimit)
        self._ratelimit = AsyncLimiter(ratelimit, 30)        
        global client
        if not client:
              self.http_client = HTTPClient(self._access_token, ratelimit)
              client = self.http_client
        else:
              self.http_client = client

代码一到位,我的例程就突然需要半分钟才能相互调用。现在我想知道这是否是由于单例方法与异步不兼容,或者是否还有其他我需要识别的东西,但目前我还不知道。

感谢您对如何在负责进行 API 调用的异步对象上更好地实现单例模式的任何提示。

帖子版权声明 1、本帖标题:Python:添加单例实现会大大减慢异步代码的执行速度
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Harith在本站《python-3.x》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: