Python 缓存机制与 functools.lru_cache

2021-04-08  本文已影响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 两个方法,分别用于清除缓存和查看缓存信息。

上一篇下一篇

猜你喜欢

热点阅读