当您使用 Streamlit 的缓存注释标记函数时,它会告诉 Streamlit 每当调用该函数时,它应该检查三件事:
- 函数名称
- 构成函数体的实际代码
- 调用函数的输入参数
如果这是 Streamlit 第一次看到这三个项目,具有这些确切的值,并且在那个确切的组合中,它会运行该函数并将结果存储在本地缓存中。
然后,下次调用该函数时,如果这三个值没有更改,Streamlit 知道它可以完全跳过执行该函数。相反,它只是从本地缓存中读取输出并将其传递给调用者。
主要限制是 Streamlit 的缓存函数不知道发生在注释函数主体之外的更改。
有关 Streamlit 缓存、其配置参数及其限制的更多信息,请参阅Caching。
函数签名
st.cache(func=None, persist=False, allow_output_mutation=False, show_spinner=True, suppress_st_warning=False, hash_funcs=None, max_entries=None, ttl=None)
参数 | 说明 |
---|---|
func (callable) | 要缓存的函数。 Streamlit 散列函数和相关代码。 |
persist (boolean) | 是否将缓存持久化到磁盘上。 |
allow_output_mutation (boolean) | 当返回值发生突变时,Streamlit 会显示警告,因为这可能会产生意想不到的后果。这是通过在内部散列返回值来完成的。 如果您知道自己在做什么并且想要覆盖此警告,请将其设置为 True。 |
show_spinner (boolean) | 启用微调器。默认为 True 以在缓存未命中时显示微调器。 |
suppress_st_warning (boolean) | 禁止从缓存函数中调用 Streamlit 函数的警告。 |
hash_funcs (dict or None) | 将类型或完全限定名称映射到散列函数。这用于覆盖 Streamlit 缓存机制中哈希器的行为:当哈希器遇到一个对象时,它将首先检查其类型是否与此 dict 中的键匹配,如果是,将使用提供的函数生成一个哈希它。有关如何使用它的示例,请参见下文。 |
max_entries (int or None) | 保留在缓存中的最大条目数,或 None 用于无界缓存。 (将新条目添加到完整缓存时,将删除最旧的缓存条目。)默认值为无。 |
ttl (float or None) | 将条目保留在缓存中的最大秒数,如果缓存条目不应过期,则为 None。默认值为无。 |
示例
@st.cache
def fetch_and_clean_data(url):
# Fetch data from URL here, and then clean it up.
return data
d1 = fetch_and_clean_data(DATA_URL_1)
# Actually executes the function, since this is the first time it was
# encountered.
d2 = fetch_and_clean_data(DATA_URL_1)
# Does not execute the function. Instead, returns its previously computed
# value. This means that now the data in d1 is the same as in d2.
d3 = fetch_and_clean_data(DATA_URL_2)
# This is a different URL, so the function executes.
设置坚持参数,使用该命令如下:
@st.cache(persist=True)
def fetch_and_clean_data(url):
# Fetch data from URL here, and then clean it up.
return data
要禁用散列返回值,请设置allow_output_mutation参数为True:
@st.cache(allow_output_mutation=True)
def fetch_and_clean_data(url):
# Fetch data from URL here, and then clean it up.
return data
要覆盖默认散列行为,请传递自定义散列函数。您可以通过映射类型来做到这一点(例如MongoClient) 到哈希函数 (ID) 像这样:
@st.cache(hash_funcs={MongoClient: id})
def connect_to_database(url):
return MongoClient(url)
或者,您可以映射类型的完全限定名称(例如“pymongo.mongo_client.MongoClient”) 改为散列函数:
@st.cache(hash_funcs={"pymongo.mongo_client.MongoClient": id})
def connect_to_database(url):
return MongoClient(url)
相关用法
- Python Streamlit st.caption用法及代码示例
- Python Streamlit st.camera_input用法及代码示例
- Python Streamlit st.container用法及代码示例
- Python Streamlit st.code用法及代码示例
- Python Streamlit st.color_picker用法及代码示例
- Python Streamlit st.checkbox用法及代码示例
- Python Streamlit st.columns用法及代码示例
- Python Streamlit st.experimental_singleton.clear用法及代码示例
- Python Streamlit st.bokeh_chart用法及代码示例
- Python Streamlit st.text_input用法及代码示例
- Python Streamlit st.area_chart用法及代码示例
- Python Streamlit st.title用法及代码示例
- Python Streamlit st.experimental_singleton用法及代码示例
- Python Streamlit st.empty用法及代码示例
- Python Streamlit st.error用法及代码示例
- Python Streamlit st.video用法及代码示例
- Python Streamlit st.vega_lite_chart用法及代码示例
- Python Streamlit st.slider用法及代码示例
- Python Streamlit st.header用法及代码示例
- Python Streamlit st.form_submit_button用法及代码示例
- Python Streamlit st.form用法及代码示例
- Python Streamlit st.plotly_chart用法及代码示例
- Python Streamlit st.bar_chart用法及代码示例
- Python Streamlit st.experimental_memo.clear用法及代码示例
- Python Streamlit st.warning用法及代码示例
注:本文由纯净天空筛选整理自streamlit.io大神的英文原创作品 st.cache。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。