A newer version of the Gradio SDK is available:
5.6.0
分块状态 (State in Blocks)
我们已经介绍了接口状态,这篇指南将介绍分块状态,它的工作原理大致相同。
全局状态 (Global State)
分块中的全局状态与接口中的全局状态相同。在函数调用外创建的任何变量都是在所有用户之间共享的引用。
会话状态 (Session State)
Gradio 在分块应用程序中同样支持会话状态,即在页面会话中跨多次提交保持的数据。需要再次强调,会话数据不会在模型的不同用户之间共享。要在会话状态中存储数据,需要完成以下三个步骤:
- 创建一个
gr.State()
对象。如果此可状态对象有一个默认值,请将其传递给构造函数。 - 在事件监听器中,将
State
对象作为输入和输出。 - 在事件监听器函数中,将变量添加到输入参数和返回值中。
让我们来看一个猜词游戏的例子。
$code_hangman $demo_hangman
让我们看看在这个游戏中如何完成上述的 3 个步骤:
- 我们将已使用的字母存储在
used_letters_var
中。在State
的构造函数中,将其初始值设置为空列表[]
。 - 在
btn.click()
中,我们在输入和输出中都引用了used_letters_var
。 - 在
guess_letter
中,我们将此State
的值传递给used_letters
,然后在返回语句中返回更新后的该State
的值。
对于更复杂的应用程序,您可能会在一个单独的分块应用程序中使用许多存储会话状态的 State
变量。
在文档中了解更多关于 State
的信息。