Я пишу веб-приложение Python, используя Flask. Мое приложение устанавливает соединение с другим сервером при запуске и периодически взаимодействует с этим сервером в фоновом режиме.
Если я не использую встроенный отладчик Flask (вызывая app.run с debug=False), проблем нет.
Если я использую встроенный отладчик (вызывая app.run с параметром debug=True), Flask запускает второй процесс Python с тем же кодом. Это дочерний процесс, который в конечном итоге прослушивает HTTP-соединения и в целом ведет себя так, как должно поступать мое приложение, и я предполагаю, что родитель просто следит за ним, когда срабатывает отладчик.
Однако это наносит ущерб моему коду запуска, который выполняется в обоих процессах; В итоге я получаю 2 подключения к внешнему серверу, 2 процесса, регистрирующиеся в одном и том же файле журнала, и, как правило, они спотыкаются друг о друга.
Я предполагаю, что мне не следует выполнять реальную работу перед вызовом app.run(), но куда я должен поместить этот код инициализации (который я хочу запускать только один раз для группы процессов Flask, независимо от режима отладчика, но который требует запускаться при запуске и независимо от клиентских запросов)?
Я нашел этот вопрос об "автоматической перезагрузке Flask и длительном потоке" что несколько связано, но несколько отличается, и ответ мне не помог. (У меня тоже есть отдельный длительный поток, помеченный как поток демона, но он уничтожается, когда запускается перезагрузка, но проблема, которую я пытаюсь решить, заключается в том, что до того, как должна произойти какая-либо перезагрузка. reload; меня беспокоит дополнительный процесс и правильный способ избежать выполнения ненужного кода в родительском процессе.)