使用debug运行flask时启动线程

时间:2014-07-07 18:53:56

标签: python multithreading flask

当我尝试在烧瓶应用程序运行的同一过程中启动一个线程时,会启动两个线程。因此“一次”将被打印两次。

from threading import Timer
from flask import Flask

app = Flask(__name__)

app.config.update(dict(
    DEBUG = True
))

def once():
  print("once")

t = Timer(1, once, ())
t.start()
app.run()

只有在DEBUG为真时才会发生这种情况。 任何人都知道如何在调试时防止这种情况发生?

1 个答案:

答案 0 :(得分:8)

Werkzeug的重新加载支持必须fork才能正确重新加载模块。因此,您的模块至少进口两次;更多,如果您更改了模块并重新加载。

您可以使用use_reloader=False

将其从重新加载器关闭
app.run(use_reloader=False)

或者你可以在@app.before_first_request decorated function

中开始你的主题
t = Timer(1, once, ())

@app.before_first_request
def start_thread():
    t.start()

start_thread函数现在仅在第一个请求进入时执行,而不是在导入时执行。