Estou usando o Flask para desenvolver um site e, durante o desenvolvimento, executo o flask usando o seguinte arquivo:
#!/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')
Quando eu inicio o servidor ou quando ele reinicia automaticamente porque os arquivos foram atualizados, ele sempre mostra a linha de impressão duas vezes:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Embora não seja realmente um problema (o resto funciona conforme o esperado), eu simplesmente me pergunto por que ele se comporta assim? Alguma ideia?
app.run
), mas não aguardando a primeira solicitação? Não quero que o primeiro pedido seja sobrecarregado com o custo de inicialização.WERKZEUG_RUN_MAIN
variável de ambiente e apenas executar seu código quandoDEBUG
for falso ouWERKZEUG_RUN_MAIN
estiver definido, por exemplo. Fica um pouco entediante.dash
para mim). Para qualquer outronoobs
como eu, isso significa apenas a funcionalidade em que editar / salvar o arquivo aciona uma atualização ao vivo.Se você estiver usando o
flask run
comando moderno , nenhuma das opções aapp.run
será usada. Para desativar o recarregador completamente, passe--no-reload
:Além disso,
__name__ == '__main__'
nunca será verdade porque o aplicativo não é executado diretamente. Use as mesmas ideias da resposta de Martijn , mas sem o__main__
bloqueio.fonte
Eu tive o mesmo problema e resolvi definindo
app.debug
comoFalse
. Definir comoTrue
estava fazendo com que eu__name__ == "__main__"
fosse chamado duas vezes.fonte
__main__
still é executado duas vezes com ambosapp.debug = False
eapp.run_server(debug=False)
. Tem certeza de que fez isso por você ou poderia postar algum código reproduzível para tentar?flask
viaplotly dash
e descobri que eles alteraram recentemente odebug
argumento padrão passado paraflask
. Vou supor que me enganei acima e talvez tenha feitoapp.debug=False
(que talvez seja substituído pelos args padrãorun_server
), ou apenas tentei sem passarTrue
, não definindo explicitamente como mostrado acima. Isso está funcionando corretamente para mim agora (certificando-se dissodebug=False
). Obrigado!No Flask 0.11, é recomendado executar seu aplicativo com, em
flask run
vez depython application.py
. Usar o último pode resultar na execução de seu código duas vezes.Conforme declarado aqui :
fonte
Um dos possíveis motivos para o aplicativo Flask rodar sozinho duas vezes é uma configuração de
WEB_CONCURRENCY
configuração no Heroku. Para configurar em um, você pode escrever no consoleheroku config:set WEB_CONCURRENCY=1
fonte
Uma observação sobre tópicos
Isso é particularmente irritante quando seu aplicativo usa threads, pois eles serão disparados duas vezes na inicialização. Pelo que eu tentei, os singletons também não corrigiram isso (o que é surpreendente). No entanto, adicionar um atraso inicial de alguns segundos antes do início do thread pode resolver o problema.
Se o aplicativo for reiniciado mais rápido do que antes de seu período de atraso terminar, o thread fornecido é gerado apenas uma vez, após a reinicialização.
fonte
Eu tive o mesmo problema. Eu resolvi isso modificando meu principal e inserindo use_reloader = False nele. Se alguém estiver aqui procurando uma solução alternativa para este problema, o código abaixo o ajudará a começar, entretanto, a funcionalidade de alterações no código detectadas automaticamente e reiniciar o aplicativo não funcionará. Você terá que parar e reiniciar manualmente seu aplicativo após cada edição no código.
fonte