使用debug运行flask时启动线程

Mar*_*son 2 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()
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 8

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

您可以通过以下方式将其从重新加载器关闭use_reloader=False:

app.run(use_reloader=False)
Run Code Online (Sandbox Code Playgroud)

或者你可以在@app.before_first_request装饰函数中启动你的线程:

t = Timer(1, once, ())

@app.before_first_request
def start_thread():
    t.start()
Run Code Online (Sandbox Code Playgroud)

start_thread功能现在仅在第一个请求进入时执行,而不是在导入时执行.