Отладчик Flask/Werkzeug, модель процесса и код инициализации

Я пишу веб-приложение Python, используя Flask. Мое приложение устанавливает соединение с другим сервером при запуске и периодически взаимодействует с этим сервером в фоновом режиме.

Если я не использую встроенный отладчик Flask (, вызывающий app.run с параметром debug=False ), нет проблем.

Если я использую встроенный отладчик (, вызывающий app.run с параметром debug=True ), Flask запускает второй процесс Python с тем же кодом. Это дочерний процесс, который в конечном итоге прослушивает HTTP-соединения и в целом ведет себя так, как должно вести себя мое приложение, и я предполагаю, что родительский процесс просто наблюдает за ним, когда включается отладчик.

Однако это наносит ущерб моему коду запуска, который выполняется в обоих процессах; В итоге я получаю 2 подключения к внешнему серверу, 2 процесса, регистрирующиеся в одном и том же файле журнала, и, как правило, они спотыкаются друг о друга.

Я предполагаю, что мне не следует выполнять реальную работу перед вызовом app.run (), но куда мне поместить этот код инициализации (, который я хочу запускать только один раз для каждой группы процессов Flask,независимо от режима отладчика, но который должен запускаться при запуске и независимо от клиентских запросов )?

Я нашел этот вопрос об «Автоматической -перезагрузке Flask и длительном -работающем потоке» , который несколько связан, но несколько отличается, и ответ мне не помог. (У меня тоже есть отдельный длинный -работающий поток, помеченный как поток демона, но он уничтожается, когда срабатывает перезагрузка, но проблема, которую я пытаюсь решить, заключается в том, что перезагрузка не требуется. Меня не волнует перезагрузка; Меня беспокоит дополнительный процесс и правильный способ избежать выполнения ненужного кода в родительском процессе.)

8
задан Community 23 May 2017 в 12:00
поделиться