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 两个方法,分别用于清除缓存和查看缓存信息。