缓存方案
内存缓存
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 不能是数字,所以后端的字典会有问题