如何正确终止在单独的线程中启动的烧瓶Web应用程序?我发现一个不完整的answer,如何做到这一点尚不清楚。下面的脚本启动一个线程,然后启动一个烧瓶应用程序。当我按 CTRL + C 时,某些内容未被终止且脚本永远不会停止。最好在except KeyboardInterrupt:
之后添加正确终止app
和thread_webAPP()
的代码。我知道如何终止一个线程,但首先我需要终止该应用程序:
def thread_webAPP():
app = Flask(__name__)
@app.route("/")
def nothing():
return "Hello World!"
app.run(debug=True, use_reloader=False)
# hope that after app.run() is terminated, it returns here, so this thread could exit
t_webApp = threading.Thread(name='Web App', target=thread_webAPP)
t_webApp.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("exiting")
# Here I need to kill the app.run() along with the thread_webAPP
答案 0 :(得分:4)
不要join
子线程。请改用setDaemon
:
from flask import Flask
import time
import threading
def thread_webAPP():
app = Flask(__name__)
@app.route("/")
def nothing():
return "Hello World!"
app.run(debug=True, use_reloader=False)
t_webApp = threading.Thread(name='Web App', target=thread_webAPP)
t_webApp.setDaemon(True)
t_webApp.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("exiting")
exit(0)
对于子线程, daemon
表示如果您尝试停止主线程,主线程将不会等到此守护程序子线程完成其作业。在这种情况下,所有子线程将自动连接,主线程将立即成功停止。
更多信息是here。