【问题标题】:Starting thread while running flask with debug使用调试运行烧瓶时启动线程
【发布时间】:2014-07-07 18:53:56
【问题描述】:

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

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 为真时发生。 任何人都知道如何在调试时防止这种情况发生?

【问题讨论】:

    标签: python multithreading flask


    【解决方案1】:

    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 函数现在只在第一个请求进来时执行,而不是在导入时执行。

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      相关资源
      最近更新 更多