Double redémarrage de l'impression dans Flask Dev Server
Lors de l'exécution d'un serveur de développement de site Web à l'aide de Flask, les utilisateurs ont remarqué un comportement anormal lors du redémarrage du serveur Le message apparaît deux fois au lieu d'une. Pour comprendre la raison derrière cela, examinons les mécanismes du serveur de développement de Flask.
Flask utilise Werkzeug, une bibliothèque d'utilitaires WSGI, pour lancer le serveur de développement via la méthode app.run(). Werkzeug utilise une technique appelée « rechargement » pour redémarrer automatiquement le serveur lors de la détection de modifications dans le code. Le processus de rechargement implique la création d'un processus enfant qui exécute à nouveau votre script Flask à l'aide de subprocess.call().
Ce processus enfant assume le même code que le processus parent, conduisant à la double exécution du message de redémarrage. Pour éliminer ce comportement, définissez le paramètre use_reloader de app.run() sur False. Vous pouvez également désactiver le rechargement pendant l'exécution en ligne de commande de Flask :
FLASK_DEBUG=1 flask run --no-reload
Pour les scénarios avancés où la détection de la présence du processus enfant de rechargement est cruciale, utilisez la fonction is_running_from_reloader() de Werkzeug. Cependant, il est conseillé d'utiliser le décorateur @app.before_first_request pour initialiser les modules globaux, garantissant une seule exécution après chaque rechargement.
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
Notez que les gestionnaires before_first_request peuvent être invoqués pour chaque nouveau sous-processus dans WSGI à grande échelle. des serveurs qui utilisent du forking ou de nouveaux sous-processus.
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!