如何为从辅助文件导入的函数添加Streamlit缓存?
Streamlit缓存函数移至辅助文件的最佳实践
推荐方案:直接在辅助文件中添加缓存装饰器
这是最简洁且贴合Streamlit设计逻辑的方式,无需在app.py中做额外包装。
在loading.py里直接定义带缓存的函数:
import streamlit as st import pandas as pd @st.cache_data def load_data(): return pd.read_csv('gcp://some-bucket/some-big-file.csv')
之后在app.py中直接导入使用即可:
from loading import load_data df = load_data()
这种方式既能保持app.py的整洁,又完全遵循Streamlit缓存的使用规则,没有多余的中间层,也是资深Streamlit用户普遍采用的最优模式。
备选方案:仅在无法修改辅助文件时使用
如果因为要复用无缓存版本等原因,不能直接修改辅助文件,你当前用的装饰器包装方式可读性更强:
from loading import load_data as _load_data @st.cache_data def load_data(): return _load_data()
相比直接赋值的写法,装饰器风格更符合Python惯用写法,后续也方便添加参数处理等额外逻辑。
你提到的直接赋值方式:
from loading import load_data as _load_data load_data = st.cache_data(_load_data)
虽然功能有效,但可读性稍弱,对不熟悉函数式编程的开发者不够直观,不推荐作为首选。
总结
优先选择直接在辅助文件中添加缓存装饰器的模式,只有在无法修改辅助文件的场景下,再考虑使用包装方式。
内容的提问来源于stack exchange,提问作者MYK
相关产品推荐
相关产品推荐

