J'utilise Flask pour développer un site Web et pendant le développement, j'exécute flask en utilisant le fichier suivant:
#!/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')
Lorsque je démarre le serveur, ou lorsqu'il redémarre automatiquement parce que les fichiers ont été mis à jour, il affiche toujours deux fois la ligne d'impression:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Bien que ce ne soit pas vraiment un problème (le reste fonctionne comme prévu), je me demande simplement pourquoi il se comporte comme ça? Des idées?
app.run
), mais sans attendre la première requête? Je ne veux pas que cette première demande soit surchargée par le coût d'initialisation.WERKZEUG_RUN_MAIN
variable d'environnement et n'exécuter votre code que lorsqueDEBUG
est false ouWERKZEUG_RUN_MAIN
est défini, par exemple. Devient un peu fastidieux.dash
pour moi). Pour tout autrenoobs
comme moi, cela signifie uniquement la fonctionnalité dans laquelle l'édition / l'enregistrement du fichier déclenche une mise à jour en direct.Si vous utilisez la
flask run
commande moderne , aucune des options àapp.run
n'est utilisée. Pour désactiver complètement le rechargeur, passez--no-reload
:De plus,
__name__ == '__main__'
cela ne sera jamais vrai car l'application n'est pas exécutée directement. Utilisez les mêmes idées de la réponse de Martijn , sauf sans le__main__
blocage.la source
J'ai eu le même problème et je l'ai résolu en réglant
app.debug
surFalse
. Le paramétrerTrue
me faisait__name__ == "__main__"
appeler deux fois.la source
__main__
fonctionne toujours deux fois avecapp.debug = False
etapp.run_server(debug=False)
. Êtes-vous sûr que cela l'a fait pour vous, ou pourriez-vous publier du code reproductible pour essayer?flask
viaplotly dash
, et j'ai découvert qu'ils avaient récemment modifié l'debug
argument par défaut passé àflask
. Je vais deviner que je me suis trompé ci-dessus et que je l'ai peut-être faitapp.debug=False
(ce qui est peut-être remplacé par l'argument par défaut derun_server
), ou seulement essayé sans passerTrue
, pas explicitement comme indiqué ci-dessus. Cela fonctionne correctement pour moi maintenant (en vous assurant quedebug=False
). Merci!À partir de Flask 0.11, il est recommandé d'exécuter votre application avec
flask run
plutôt quepython application.py
. L'utilisation de ce dernier pourrait entraîner l'exécution de votre code deux fois.Comme indiqué ici :
la source
L'une des raisons possibles pour lesquelles l'application Flask s'exécute deux fois est une configuration de
WEB_CONCURRENCY
paramètre sur Heroku. Pour définir en un, vous pouvez écrire dans la consoleheroku config:set WEB_CONCURRENCY=1
la source
Une observation concernant les fils
Ceci est particulièrement ennuyeux lorsque votre application utilise des threads car ils seront déclenchés deux fois au démarrage. Pour autant que j'ai essayé les singletons, cela ne remédie pas non plus (ce qui est surprenant). Cependant, l'ajout d'un délai initial de quelques secondes avant le démarrage de votre thread peut résoudre le problème.
Si l'application redémarre plus rapidement qu'avant la fin de votre délai, le thread donné n'est généré qu'une seule fois, après le redémarrage.
la source
J'ai eu le même problème. Je l'ai résolu en modifiant mon principal et en y insérant use_reloader = False. Si un organisme est ici à la recherche d'une solution de contournement à ce problème, le code ci-dessous vous permettra de démarrer, mais la fonctionnalité des modifications de code détectées automatiquement et le redémarrage de l'application ne fonctionneront pas. Vous devrez arrêter et redémarrer manuellement votre application après chaque modification du code.
la source