记录一次python3 flask 多线程被执行两次的问题

发布时间 2023-12-28 17:05:08作者: BrianSun

前言


最近在使用 python3 flask 做管理服务,需要实现服务中 flask server 和 另一个多线程while循环同时存在,如下

from flask import Flask , jsonify, request, abort,Response,send_file,render_template,redirect,url_for,send_from_directory,make_response
from flask_bootstrap import Bootstrap

app = Flask(__name__, static_url_path='/static')
bootstrap = Bootstrap(app)

import time
import threading

def daemon_task:
  while True:
    print("start daemon")
    time.sleep(10)

if __name__ == "__main__":
   # 守护线程
   thread_task = threading.Thread(target=daemon_task)
   thread_task.start()
   
   app.run(debug=True)

运行中发现,多线程 daemon_task 被启动了两次,使用单例模式或者换用 multiprocessing.Process 都没有解决

正文


参考博客:Flask 运行2次

原来是 debug=True 的原因,chatgpt 回答是:当使用 Flask 的 app.run() 启动应用程序时,如果将 debug 参数设置为 True,则应用程序将会在单独的线程中运行,并且在代码修改后会自动重新加载,这可能导致应用程序初始化多次,包括后台任务的启动。

解决方案就是 debug=False