缓存
当涉及到速度时,缓存就变得超级重要 - 尤其是处理大型数据集时。 一个好的思路时载入数据、缓存昂贵的部分、可视化数据,然后进行交互。
Streamlit可以快速更新并重新执行整个应用逻辑,这一能力当你处理
小数据集时非常棒,但是当你需要长时间计算时,这样简单的处理会
成本昂贵并且非常耗时。这种情况下不应该重新执行整个应用,
你可以安全的使用@st.cache
来重用数据。st.cache是一个让Streamlit
应用安全无痛的持久化信息的数据仓。
当你使用Streamlit的cache注解来标记一个函数时,就告诉Streamlit 任何时候调用这个函数都需要检查三个东西:
- 组成函数提的实际字节码
- 这个函数依赖的代码、变量和文件
- 调用函数时传入的参数
如果Streamlit是第一次见到这些内容,它就会运行函数并在本地缓存中 保存结果。下一次函数再被调用时,如果没有变化,那么Streamlit就 可以直接利用缓存的值。
那么,这样做的局限性在哪里?
的确有一些局限性:
- Streamlit只会检查当前工作目录中的变化
- 如果你的函数不是确定性的(输出依赖于随机数),或者它从外部拉取 时变数据(例如股票行情),那么Streamlit无法判断发生了变化
- 不要修改缓存函数的输出,因为缓存值是按引用保存的