Maison > développement back-end > Tutoriel Python > Pourquoi mon serveur de développement Flask imprime-t-il deux fois les messages de démarrage ?

Pourquoi mon serveur de développement Flask imprime-t-il deux fois les messages de démarrage ?

Barbara Streisand
Libérer: 2024-12-20 01:04:08
original
326 Les gens l'ont consulté

Why Does My Flask Development Server Print Startup Messages Twice?

Flask Development Server s'exécutant deux fois

Lors de l'exécution d'une application Flask à l'aide de la méthode app.run(), vous pouvez rencontrer une situation où l'instruction d'impression indiquant le redémarrage du serveur apparaît deux fois. Ce comportement peut être attribué au rechargeur Werkzeug.

Werkzeug, la bibliothèque sous-jacente qui alimente le serveur de développement de Flask, utilise un mécanisme de processus enfant pour faciliter les modifications de code et le redémarrage automatique. Lorsque vous exécutez app.run(), le rechargeur génère un processus enfant qui surveille systématiquement votre code.

Pour illustrer cela, disséquons la fonction restart_with_reloader() dans Werkzeug. La fonction appelle subprocess.call() pour exécuter à nouveau votre script, conduisant à la génération d'un processus enfant. Par conséquent, vous observez l'instruction d'impression deux fois.

Pour éliminer cette duplication, pensez à désactiver le rechargement. Vous pouvez y parvenir en définissant use_reloader sur False dans app.run() :

app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
Copier après la connexion

Vous pouvez également désactiver le rechargement lorsque vous utilisez la commande flask run :

FLASK_DEBUG=1 flask run --no-reload
Copier après la connexion

Une autre option consiste à utiliser la fonction werkzeug.serving.is_running_from_reloader() pour déterminer si vous exécutez dans l'enfant du rechargeur processus.

Cependant, si vous avez besoin de modules globaux, optez pour le décorateur @app.before_first_request. Ce décorateur vous permet de spécifier une fonction qui sera invoquée une fois après chaque rechargement, lorsque la première requête est reçue :

@app.before_first_request
def before_first_request():
    print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
Copier après la connexion

Notez que lors de l'exécution sur un serveur WSGI à grande échelle utilisant un forking ou des sous-processus pour la gestion des requêtes , les gestionnaires before_first_request peuvent être invoqués pour chaque sous-processus nouvellement créé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal