在线程中正确终止 Flask Web 应用程序 运行
Properly terminate flask web app running in a thread
如何正确终止在单独线程中启动的 Flask Web 应用程序?我发现了一个不完整的 ,不清楚如何去做。下面的脚本启动一个线程,该线程又启动一个烧瓶应用程序。当我按下 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
不要 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。
如何正确终止在单独线程中启动的 Flask Web 应用程序?我发现了一个不完整的 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
不要 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。