Остановить колбу (без контекста запроса)

Единственный официально документированный способ остановить 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!

0 ответов

Другие вопросы по тегам