运行 Dash App 时多次启动工作线程

问题描述 投票:0回答:1

我正在尝试 (a) 有一个工作线程来执行一些后台工作,以及 (b) 使用 Dash 监控其进度。由于某种原因,在执行代码时,脚本被加载两次,并且最终运行了两个工作线程。下面的代码重现了这种情况。

import threading
import time
from threading import Thread

from dash import Dash, html

print("Load script")


def worker():
    print(f"Worker started; Thread {threading.get_ident()}")
    i = 0
    while True:
        time.sleep(5)
        print(f"Thread {threading.get_ident()}, iteration {i}")
        i += 1


if __name__ == "__main__":
    app = Dash("App")
    app.layout = html.Div([html.Div(id='dummy')])
    worker_thread = Thread(target=worker)
    worker_thread.start()
    app.run(debug=True)

输出为:

Load script
Worker started; Thread 6179811328
Dash is running on http://127.0.0.1:8050/

 * Serving Flask app 'App'
 * Debug mode: on
Load script
Worker started; Thread 6121779200
Thread 6179811328, iteration 0
Thread 6121779200, iteration 0

如输出所示,脚本被第二次加载,并创建了另一个工作线程。我想知道为什么以及如何防止它。

python multithreading plotly-dash
1个回答
0
投票

我无法给你确切的“为什么”,但它与破折号/烧瓶打开的“调试模式”有关。启动时,它会启动整个应用程序两次,运行主脚本两次,因此,在您的情况下,创建两个线程来打印每次迭代。

可以通过

app.run(debug=False)
将其关闭。

请注意:如果您以不同的方式运行应用程序(即使用

flask run
),请确保使用适当的标志来禁用/启用调试模式。

© www.soinside.com 2019 - 2024. All rights reserved.