缓存方案

予早 2025-02-21 01:08:24
Categories: Tags:

缓存方案

内存缓存

 from functools import lru_cache
 
 @lru_cache(maxsize=128)
 def expensive_function(param):
     # 这里是一些昂贵的操作
     return result
 from cachetools import LRUCache
 
 cache = LRUCache(maxsize=100)
 cache['key'] = 'value'
 value = cache['key']

**joblib**:这是一个用于缓存函数调用结果的库,特别适用于机器学习领域。

 from joblib import Memory
 
 memory = Memory(location='.', verbose=0)
 @memory.cache
 def load_data():
     # 加载数据的代码
     return data

磁盘缓存

dill

 dill 是一个 Python 第三方库,它扩展了 Python 标准库中的 pickle 模块,用于序列化和反序列化 Python 对象。dill 的主要优势在于它能够处理 pickle 无法序列化的更复杂的对象类型,比如函数、类、lambda 表达式、闭包以及一些动态创建的对象。
 
 以下是 dill 包的一些关键特性:
 
 增强的序列化能力:dill 支持序列化 lambda 函数、包含默认参数的函数、以及一些 pickle 无法处理的特殊对象。
 
 会话状态保存:dill 可以保存和加载当前 Python 解释器的会话状态,这对于调试和分析非常有用。
 
 源码还原:dill 的 source 模块可以从序列化结果中还原对象的源码,这在序列化的对象为函数时非常有用。
 
 与 pickle 的兼容性:dill 兼容 pickle 的用法,因此可以很容易地替换 pickle 来获得更强大的序列化能力。
 
 跨进程和机器的对象传输:dill 使得 Python 对象能够在不同的进程或机器之间进行传输。
 
 使用 dill 的基本方法如下:
 
 import dill
 
 # 对象序列化
 with open('object.pkl', 'wb') as f:
     dill.dump(your_object, f)
 
 # 对象反序列化
 with open('object.pkl', 'rb') as f:
     your_object = dill.load(f)
 dill 的这些特性使其成为机器学习、数据处理等领域中保存和加载模型或复杂对象的有力工具。然而,需要注意的是,使用 dill 序列化模型时可能会遇到版本兼容性问题,尤其是在 scikit-learn 或 statsmodels 等库更新版本后。因此,在使用 dill 时,需要确保模型的版本与 dill 库的版本兼容,或者考虑使用其他更稳定的序列化库。

插件

String Manipulation

手动环境加载

flask

 def do_work(*args, **kwargs):
     from app import app # 加载环境
     with app.app_context(): # 加载 flask 上下文
         ... # do something

如果某一个 py 文件既被单独执行的脚本引用,又被 web 服务使用

 try:
     import app
 except:
     pass

持久化 TfidfVectorizer

使用 dill

https://stackoverflow.com/questions/67714255/how-to-pickle-dump-tfidf-vectorizer-with-custom-method

JSON 中字典的 key 不能是数字,所以后端的字典会有问题