What is serializable session state?
Serializable Session State
序列化是指将对象或数据结构转换为可以持久化和共享的格式,并允许您恢复数据的原始结构的过程。Python的内置pickle模块将Python对象序列化为字节流(“pickling”),并将流反序列化为对象(“unpickling”)。
默认情况下,Streamlit的Session State允许您在会话期间持久化任何Python对象,无论该对象是否可pickle序列化。此属性使您可以存储Python基本类型,如整数、浮点数、复数和布尔值,数据框,甚至函数返回的lambdas。然而,某些执行环境可能需要对Session State中的所有数据进行序列化,因此在开发过程中检测不兼容性,或当执行环境将来停止支持时,可能会很有用。
为此,Streamlit 提供了一个 runner.enforceSerializableSessionState
配置选项,当设置为 true
时,只允许在会话状态中使用可 pickle 序列化的对象。要启用此选项,可以创建一个全局或项目配置文件,内容如下,或者将其用作命令行标志:
# .streamlit/config.toml
[runner]
enforceSerializableSessionState = true
所谓“pickle可序列化”,我们指的是调用pickle.dumps(obj)
不应引发PicklingError
异常。当启用配置选项时,向会话状态添加不可序列化的数据应导致异常。例如,
import streamlit as st
def unserializable_data():
return lambda x: x
#👇 results in an exception when enforceSerializableSessionState is on
st.session_state.unserializable = unserializable_data()

还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。