美文网首页
Python 缓存机制与 functools.lru_cache

Python 缓存机制与 functools.lru_cache

作者: 沫明 | 来源:发表于2021-04-08 20:05 被阅读0次
    import json
    from functools import lru_cache
    
    import requests
    
    
    class GtCom(object):
        url = '############'
    
        def __init__(self, srcl='auto', tgtl='nzh'):
            self.srcl = srcl
            self.tgtl = tgtl
    
        def translate(self, translate_text):
            return self._translate(self.srcl, self.tgtl, translate_text)
    
        @staticmethod
        @lru_cache(1000) #缓存一千条数据
        def _translate(srcl, tgtl, translate_text):
            parameters = {'srcl': srcl, 'tgtl': tgtl, 'text': translate_text}
            req = requests.post(GtCom.url, data=json.dumps(parameters))
            result = json.loads(req.text)
            res = None
            try:
                res = result['translation'][0]['translated'][0]['text']
            except Exception as e:
                # 机翻失败
                print(e)
            print("{} --> {}".format(translate_text, res))
            return res
    
    
    if __name__ == '__main__':
        translate_text = "Colin Allred."
        gtcom = GtCom()
        r = gtcom.translate(translate_text)
        print(r)
        r = gtcom.translate(translate_text)
        print(r)
    

    @functools.lru_cache(maxsize=None, typed=False)
    使用functools模块的lur_cache装饰器,可以缓存最多 maxsize 个此函数的调用结果,从而提高程序执行的效率,特别适合于耗时的函数。参数maxsize为最多缓存的次数,如果为None,则无限制,设置为2n时,性能最佳;如果 typed=True(注意,在 functools32 中没有此参数),则不同参数类型的调用将分别缓存,例如 f(3) 和 f(3.0)。

    被 lru_cache 装饰的函数会有 cache_clear 和 cache_info 两个方法,分别用于清除缓存和查看缓存信息。

    相关文章

      网友评论

          本文标题:Python 缓存机制与 functools.lru_cache

          本文链接:https://www.haomeiwen.com/subject/ligvkltx.html