当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Streamlit st.cache用法及代码示例


当您使用 Streamlit 的缓存注释标记函数时,它会告诉 Streamlit 每当调用该函数时,它应该检查三件事:

  1. 函数名称
  2. 构成函数体的实际代码
  3. 调用函数的输入参数

如果这是 Streamlit 第一次看到这三个项目,具有这些确切的值,并且在那个确切的组合中,它会运行该函数并将结果存储在本地缓存中。

然后,下次调用该函数时,如果这三个值没有更改,Streamlit 知道它可以完全跳过执行该函数。相反,它只是从本地缓存中读取输出并将其传递给调用者。

主要限制是 Streamlit 的缓存函数不知道发生在注释函数主体之外的更改。

有关 Streamlit 缓存、其配置参数及其限制的更多信息,请参阅Caching

用于 memory 函数执行的函数装饰器。

函数签名

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)

相关用法


注:本文由纯净天空筛选整理自streamlit.io大神的英文原创作品 st.cache。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。