I have two code snippets in different projects, which seem functionally identical, but caching works for one, but doesn’t work for the other, and I don’t understand why.
This code snippet loads in a pickled
dict. Streamlit reruns this at every execution, seemingly ignoring the cache command:
@st.cache def getData(): return pickle.load(open(pickleFile,"rb")).data.numpy() p = getData()
In contrast, Streamlit correctly caches this operation, which loads in a PyTorch tensor:
@st.cache def loadW(suppress_st_warning=True): st.write('loading') return pickle.load(open(pickleFile,"rb")).data.numpy() W = loadW()
I’ve moved these into
.py files which do nothing but the above, and this still happens.
pickleFile is constant in both files. (Note that the
st.write does not affect this, I’ve tried it both ways.)
In my reading of the docs, these should both cache, because none of the inputs are changing. (The files are obviously not changing as well.) Why does the first snippet rerun on each execution?