Estoy usando Flask para desarrollar un sitio web y mientras estoy en desarrollo ejecuto flask usando el siguiente archivo:
#!/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')
Cuando inicio el servidor, o cuando se reinicia automáticamente porque los archivos se han actualizado, siempre muestra la línea de impresión dos veces:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Aunque realmente no es un problema (el resto funciona como se esperaba), simplemente me pregunto por qué se comporta así. ¿Algunas ideas?
app.run
), pero sin esperar la primera solicitud? No quiero que esa primera solicitud se cargue con el costo de inicialización.WERKZEUG_RUN_MAIN
variable de entorno y solo ejecutar su código cuandoDEBUG
es falso oWERKZEUG_RUN_MAIN
está configurado, por ejemplo. Se vuelve un poco tedioso.dash
para mí). Para cualquier otronoobs
como yo, esto solo significa la funcionalidad en la que editar / guardar el archivo activa una actualización en vivo.Si está utilizando el
flask run
comando moderno , noapp.run
se utiliza ninguna de las opciones para . Para deshabilitar el cargador por completo, pase--no-reload
:Además,
__name__ == '__main__'
nunca será cierto porque la aplicación no se ejecuta directamente. Use las mismas ideas de la respuesta de Martijn , excepto sin el__main__
bloque.fuente
Tuve el mismo problema y lo resolví estableciendo
app.debug
enFalse
. Establecerlo enTrue
estaba causando que me__name__ == "__main__"
llamaran dos veces.fuente
__main__
todavía corre dos veces con ambosapp.debug = False
yapp.run_server(debug=False)
. ¿Está seguro de que lo hizo por usted o podría publicar algún código reproducible para probar?flask
viaplotly dash
, y descubrí que recientemente cambiaron eldebug
argumento predeterminado que se pasó aflask
. Voy a suponer que me equivoqué anteriormente y tal vez lo hiceapp.debug=False
(lo que tal vez esté anulado por los argumentos predeterminadosrun_server
), o solo lo intenté sin pasarTrue
, sin configurar explícitamente como se muestra arriba. Esto está funcionando correctamente para mí ahora (asegurándome de esodebug=False
). ¡Gracias!Desde Flask 0.11, se recomienda ejecutar su aplicación con en
flask run
lugar depython application.py
. El uso de este último podría resultar en ejecutar su código dos veces.Como se indica aquí :
fuente
Una de las posibles razones por las que la aplicación Flask se ejecuta sola dos veces es una configuración de
WEB_CONCURRENCY
configuración en Heroku. Para configurarlo en uno, puede escribir en la consolaheroku config:set WEB_CONCURRENCY=1
fuente
Una observación sobre los hilos
Esto es particularmente molesto cuando su aplicación usa subprocesos, ya que se activarán dos veces al inicio. Por lo que probé, los singleton tampoco remedian esto (lo cual es sorprendente). Sin embargo, agregar un retraso inicial de unos segundos antes de que se inicie el hilo puede resolver el problema.
Si la aplicación se reinicia más rápido que antes de que finalice el período de demora, el hilo dado solo se genera una vez, después del reinicio.
fuente
Tuve el mismo problema. Lo resolví modificando mi main e insertando use_reloader = False en él. Si alguien está aquí buscando una solución para este problema, el siguiente código lo ayudará a comenzar, sin embargo, la funcionalidad de los cambios en el código que se detectan automáticamente y reinicia la aplicación no funcionará. Tendrá que detener y reiniciar manualmente su aplicación después de cada edición en el código.
fuente