Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,24 @@ This page only contains information on the `st.cache_resource` API. For a deeper

</Tip>

<Note>

Due to the current implementation of Streamlit’s caching mechanism, objects passed to
`st.cache_resource` must be **pickle-able** (serializable) in addition to being
**hashable**.

Streamlit’s rerun model relies on **content-based hashing** to determine when cached
values can be reused across reruns. This hashing mechanism is implemented using
Python’s pickling system (via the `__reduce__()` method). As a result, cached objects
must be pickle-able.

Objects that contain non-pickle-able elements (such as functions, lambdas, or open
file handles) may raise errors such as:

`TypeError: cannot pickle 'function' object`

</Note>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems OK to me, it might be good to go into a bit more detail on the reason for the implementation. For example,

Streamlit's rerun model requires content-based hashing which is provided by python's __reduce__() method which means that objects must not only be hashable but also pickle-able. Objects that contain non-pickleable elements (such as functions) may raise errors like TypeError: cannot pickle 'function' object.

I am wondering whether we should change the actual error. Do you have any suggestions @sfc-gh-dmatthews


<Autofunction function="streamlit.cache_resource" oldName="streamlit.experimental_singleton" />

<Autofunction function="streamlit.cache_resource.clear" oldName="streamlit.experimental_singleton.clear" />
Expand Down