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

Dash程序运行时代码重复执行两次的问题求助

Dash调试模式下代码重复执行的问题

复现代码

import dash
from dash import html

if __name__ == '__main__':
    print("This should print once")

app = dash.Dash(__name__)

# 定义Dash应用布局
app.layout = html.Div(
    children=[
        html.H1("Hello, Dash!")
    ]
)

app.run_server(debug=True)

问题情况

在VSCode里运行这段代码时,print("This should print once")会执行两次,控制台会打出两遍内容。放到实际项目里更麻烦,会生成两个WebSocket对象、打开两个流,整个程序逻辑被重复执行。本来if __name__ == '__main__':是用来防止代码被Dash自动导入时重复运行的,结果却出现了两个main命名空间的状况。

原因分析

这是因为Dash的调试模式(debug=True)默认开启了代码热重载功能。开启热重载后,Dash会启动两个进程:

  • 主进程:负责监听文件变化,一旦检测到代码修改就自动重启应用;
  • 子进程:真正运行你的应用代码。
    结合VSCode的运行机制,这两个进程中的__name__都会被设为'__main__',所以if __name__ == '__main__':代码块里的内容会被执行两次。

解决办法

有两种实用的解决方式:

  1. 关闭热重载:如果不需要代码修改后自动刷新,可以在启动服务器时禁用热重载:
app.run_server(debug=True, use_reloader=False)

这样只会启动一个进程,代码只会执行一次。

  1. 调整代码结构:把应用初始化的代码也放进if __name__ == '__main__':块里,确保只有主进程会执行这些逻辑:
import dash
from dash import html

if __name__ == '__main__':
    print("This should print once")
    app = dash.Dash(__name__)
    app.layout = html.Div(
        children=[
            html.H1("Hello, Dash!")
        ]
    )
    app.run_server(debug=True)

这种方式既能保留热重载的便利,又能避免重复执行初始化逻辑。

内容的提问来源于stack exchange,提问作者Philip C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:52:15