唯一的officially documented way of stopping Flask from within the application只能通过请求上下文来完成:
from flask import request
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
@app.route('/shutdown', methods=['POST'])
def shutdown():
shutdown_server()
return 'Server shutting down...'
这导致了非常丑陋和hacky场景,如果你想让它从进程的另一部分关闭,你几乎必须编写从服务器到自身的请求脚本(即:not not响应请求并且您没有请求上下文)。这也将杀戮终点暴露给整个网络(即使它不重要/非刺激,如果没有必要仍然是愚蠢的。)
在没有请求上下文的情况下,是否有一种清除Flask的方法,即:神话app.stop()
?
有关更多背景信息,并且没有深入了解让我在线程中运行Flask的深奥理由(对我的程序有意义,我保证):
class WebServer:
def __init__(self):
self.app = Flask('test')
self.thread = threading.Thread(target=self.app.run)
@self.app.route('/')
def index():
return 'Hello World'
def start(self):
self.thread.start()
def stop(self):
# how can I implement this? just getting Flask to end would end the thread!