You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为从辅助文件导入的函数添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:15:12