Остановить колбу (без контекста запроса)
Единственный официально документированный способ остановить Flask из приложения можно сделать только с помощью контекста запроса:
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...'
Это приводит к очень уродливому и хакерскому сценарию, когда вам в значительной степени приходится составлять сценарий запроса от сервера к себе, если вы хотите, чтобы он завершился из другой части процесса (то есть: не в ответ на запрос и у вас нет запроса). контекст). Это также открывает конечную точку уничтожения для всей сети (даже если это неважно / не является продуктом, но по-прежнему глупо, если не нужно).
Есть ли чистый способ остановить 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!