traductor meaning python flask

python - meaning - ¿Por qué ejecutar el servidor de desarrollo de Flask se ejecuta dos veces?



flask wikipedia (3)

El recargador Werkzeug genera un proceso secundario para que pueda reiniciar ese proceso cada vez que cambie su código. Werkzeug es la biblioteca que suministra Flask con el servidor de desarrollo cuando llama a app.run() .

Ver el código de la función restart_with_reloader() ; su script se ejecuta nuevamente con subprocess.call() .

Si configura use_reloader en False , verá que el comportamiento se va, pero también perderá la funcionalidad de recarga:

app.run(port=4004, debug=config.DEBUG, host=''0.0.0.0'', use_reloader=False)

Puede desactivar el recargador cuando usa también el comando de flask run del flask run :

FLASK_DEBUG=1 flask run --no-reload

Puede buscar la variable de entorno WERKZEUG_RUN_MAIN si desea detectar cuando está en el proceso secundario de recarga:

import os if os.environ.get(''WERKZEUG_RUN_MAIN'') == ''true'': print ''################### Restarting @ {} ###################''.format( datetime.utcnow())

Sin embargo, si necesita configurar módulos globales, entonces debe usar el decorador @app.before_first_request en una función y tener esa función configurada como globales. Se llamará solo una vez después de cada recarga cuando llegue la primera solicitud:

@app.before_first_request def before_first_request(): print ''########### Restarted, first request @ {} ############''.format( datetime.utcnow())

Tenga en cuenta que si ejecuta esto en un servidor WSGI a gran escala que utiliza bifurcaciones o nuevos subprocesos para manejar solicitudes, se pueden invocar los manejadores before_first_request para cada nuevo subproceso.

Estoy usando Flask para desarrollar un sitio web y mientras estoy en desarrollo ejecuto el matraz 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 en realidad no es un problema (el resto funciona como se esperaba), simplemente me pregunto por qué se comporta así. ¿Algunas ideas?


Si está utilizando el comando moderno de flask run , no se utiliza ninguna de las opciones de app.run . Para desactivar completamente el recargador, pase --no-reload :

FLASK_DEBUG=1 flask run --no-reload

Además, __name__ == ''__main__'' nunca será verdadero porque la aplicación no se ejecuta directamente. Use las mismas ideas de share de share , excepto sin el bloque __main__ .

if os.environ.get(''WERKZEUG_RUN_MAIN'') != ''true'': # do something only once, before the reloader if os.environ.get(''WERKZEUG_RUN_MAIN'') == ''true'': # do something each reload


Tuve el mismo problema, y ​​lo resolví configurando app.debug en False . Establecerlo en True causaba que mi __name__ == "__main__" se llamara dos veces.

(Lo habría publicado como un comentario, pero no tengo suficientes representantes. Publicado como respuesta con la esperanza de que pueda ayudar a alguien más)