You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Taipy中invoke_long_callback使用求助:长回调参数传递与线程报错

Taipy long_callback 正确使用指南

问题场景

按钮代码:

<|INICIAR|button|on_action={on_iniciar_ini}|id=btn01|>

初始回调实现:

def on_iniciar_ini(state, id, action):
    notify(state, "info", "Heavy task started...")
    invoke_long_callback(state, on_iniciar, [...heavy_function arguments...])

def on_iniciar(state, id, action):
    C4=state.Jiga.Status_AI0()  # 关联下拉框值
    C3=state.Jiga.Status_AI1()  # 关联下拉框值
    ...更多业务代码

调用invoke_long_callback(state, on_iniciar, [])时触发错误:

TaipyGuiWarning: invoke_long_callback(): Exception raised in function on_iniciar(). on_iniciar() missing 3 required positional arguments: 'state', 'id', and 'action'

修改代码后:

def on_iniciar_ini(state, id, action):
    notify(state, "info", "Heavy task started...")
    invoke_long_callback(state,on_iniciar(state))
    #invoke_long_callback(state, on_iniciar, [])

def on_iniciar(state):
    C4=state.Jiga.Status_AI0()   
    C3=state.Jiga.Status_AI1()  # 关联下拉框值
...更多业务代码

运行后出现线程异常:

Exception in thread Thread-64 (user_function_in_thread): Traceback
(most recent call last): File
"C:\Users\jaime.rodriguez\MULTELETRONIC\SoftJigas\PP000938_SoftJig.venv\lib\site-packages\taipy\gui\gui_actions.py",
line 341, in user_function_in_thread
res = user_function(*uf_args) TypeError: 'NoneType' object is not callable

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "C:\Program
Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\threading.py",
line 1016, in _bootstrap_inner
self.run() File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\threading.py",
line 953, in run
self._target(*self._args, **self._kwargs) File "C:\Users\jaime.rodriguez\XXXX\XXXX\PP000938_SoftJig.venv\lib\site-packages\taipy\gui\gui_actions.py",
line 344, in user_function_in_thread
callback_on_status(False, e, user_function.name) AttributeError: 'NoneType' object has no attribute 'name'. Did you
mean: 'ne'?


正确解决方案

1. 核心规则梳理

  • invoke_long_callback第二个参数必须是函数引用,不能直接执行函数(比如on_iniciar(state)会立即执行并返回None,导致Taipy调用空对象报错)
  • state由Taipy自动注入到长时任务函数中,不需要手动传入参数列表
  • 长时任务函数不需要id和action参数(除非你主动传递),因为invoke_long_callback不会自动传递按钮的这两个属性

2. 修正后完整代码

按钮代码保持不变:

<|INICIAR|button|on_action={on_iniciar_ini}|id=btn01|>

回调函数调整为:

def on_iniciar_ini(state, id, action):
    notify(state, "info", "Heavy task started...")
    # 正确调用:传入函数引用,空参数列表(state由Taipy自动注入)
    invoke_long_callback(state, on_iniciar, [])

def on_iniciar(state):
    # 直接通过state获取所需值
    C4 = state.Jiga.Status_AI0()
    C3 = state.Jiga.Status_AI1()
    # ...你的长时业务逻辑代码

3. 扩展场景:传递额外参数

如果需要把按钮的id/action或其他值传入长时任务,可手动添加到参数列表:

def on_iniciar_ini(state, id, action):
    notify(state, "info", "Heavy task started...")
    # 将id和action传入参数列表
    invoke_long_callback(state, on_iniciar, [id, action])

def on_iniciar(state, btn_id, btn_action):
    # 使用传入的额外参数
    print(f"触发任务的按钮ID:{btn_id}")
    C4 = state.Jiga.Status_AI0()
    C3 = state.Jiga.Status_AI1()
    # ...业务代码

4. 注意事项

  • 长时任务中修改state对象会自动同步到前端UI,无需额外操作
  • 若长时任务需要返回结果,可结合callback_on_status参数处理(参考Taipy官方文档逻辑)

内容的提问来源于stack exchange,提问作者Jaime Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:17:43