Я использую Flask для разработки веб-сайта, а во время разработки запускаю Flask, используя следующий файл:
#!/usr/bin/env python
from datetime import datetime
from app import app
import config
if __name__ == '__main__':
print '################### Restarting @', datetime.utcnow(), '###################'
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')
Когда я запускаю сервер или когда он автоматически перезагружается из-за обновления файлов, он всегда показывает строку печати дважды:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Хотя на самом деле это не проблема (остальное работает, как ожидалось), мне просто интересно, почему он так себя ведет? Любые идеи?
app.run
), но не дожидаясь первого запроса? Я не хочу, чтобы этот первый запрос был обременен стоимостью инициализации.WERKZEUG_RUN_MAIN
переменную среды и запускать свой код, только если , например,DEBUG
false илиWERKZEUG_RUN_MAIN
установлено. Становится немного утомительно.dash
для меня уничтожит всю цель использования ). Для любого другогоnoobs
, такого как я, это означает только функциональность, при которой редактирование / сохранение файла запускает обновление в реальном времени.Если вы используете современную
flask run
команду, ни один из параметровapp.run
не используется. Чтобы полностью отключить перезагрузчик, передайте--no-reload
:Кроме того,
__name__ == '__main__'
никогда не будет правдой, потому что приложение не выполняется напрямую. Используйте те же идеи из ответа Martijn , за исключением__main__
блока.источник
У меня была такая же проблема, и я решил ее, установив
app.debug
наFalse
. Установка этого значения вызвала двойной вызовTrue
my__name__ == "__main__"
.источник
__main__
прежнему работает дважды с обоимиapp.debug = False
иapp.run_server(debug=False)
. Вы уверены, что это сделало это за вас, или вы могли бы опубликовать воспроизводимый код, чтобы попробовать?flask
viaplotly dash
и обнаружил, что недавно они изменилиdebug
переданный аргумент по умолчаниюflask
. Я собираюсь предположить, что я ошибся выше и, возможно, ошибсяapp.debug=False
(что, возможно, переопределено аргументами по умолчаниюrun_server
), или попытался только без передачиTrue
, а не с явной настройкой, как показано выше. Теперь у меня это работает правильно (убедившись в этомdebug=False
). Спасибо!Начиная с Flask 0.11, рекомендуется запускать приложение с использованием,
flask run
а неpython application.py
. Использование последнего может привести к двойному запуску вашего кода.Как указано здесь :
источник
Одна из возможных причин, по которой приложение Flask запускается дважды, - это конфигурация
WEB_CONCURRENCY
настроек на Heroku. Чтобы установить в один, вы можете написать в консолиheroku config:set WEB_CONCURRENCY=1
источник
Я была такая же проблема. Я решил это, изменив свой основной и вставив в него use_reloader = False. Если кто-то здесь ищет обходной путь для этой проблемы, то приведенный ниже код поможет вам начать работу, однако вы обнаружите, что изменения в коде автоматически обнаруживаются и перезапуск приложения не будет работать. Вам придется вручную останавливать и перезапускать приложение после каждого редактирования кода.
источник