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_MAINvariable de entorno y solo ejecutar su código cuandoDEBUGes falso oWERKZEUG_RUN_MAINestá configurado, por ejemplo. Se vuelve un poco tedioso.dashpara mí). Para cualquier otronoobscomo yo, esto solo significa la funcionalidad en la que editar / guardar el archivo activa una actualización en vivo.Si está utilizando el
flask runcomando moderno , noapp.runse 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.debugenFalse. Establecerlo enTrueestaba causando que me__name__ == "__main__"llamaran dos veces.fuente
__main__todavía corre dos veces con ambosapp.debug = Falseyapp.run_server(debug=False). ¿Está seguro de que lo hizo por usted o podría publicar algún código reproducible para probar?flaskviaplotly dash, y descubrí que recientemente cambiaron eldebugargumento 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 runlugar 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_CONCURRENCYconfiguración en Heroku. Para configurarlo en uno, puede escribir en la consolaheroku config:set WEB_CONCURRENCY=1fuente
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