当我尝试在烧瓶应用程序运行的同一过程中启动一个线程时,会启动两个线程。因此“一次”将被打印两次。
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为真时才会发生这种情况。 任何人都知道如何在调试时防止这种情况发生?
答案 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
函数现在仅在第一个请求进入时执行,而不是在导入时执行。