Как я могу передать объект threading.Event в приложение Flask и вызвать событие на одном из его маршрутов - PullRequest
0 голосов
/ 04 ноября 2019

С помощью следующего кода я пытаюсь запустить сервер Flask в отдельном потоке, а затем уведомить основной поток о прекращении работы, когда сервер Flask получает запрос GET /shutdown. Я делаю это, передавая threading.Event объект в приложение через app.configs и затем устанавливая это событие в маршруте /shutdown.

app = Flask(__name__)


@app.route('/shutdown')
def shutdown():
    # retrieve stop event from the Flask server configs, and trigger it
    stop_event = app.config.get('stop_event')
    stop_event.set()
    return 'Shutting down...'

def start_server(stop_event):
    # passing the stopping event to the Flask server
    app.config['stop_event'] = stop_event
    threading.Thread(name='Shutdown', target=app.run, kwargs={'host': '127.0.0.1', 'port': 5003}).start()


if __name__ == '__main__':
    stop_event = threading.Event()
    start_server(stop_event)
    if stop_event.wait():
        sys.exit(0)

Когда я запускаю curl http://127.0.0.1:5003/shutdown, я получаю сообщение Shutting down..., но событие никогда не запускается и основной поток все еще блокируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...