Puis-je servir plusieurs clients en utilisant simplement Flacon app.run() de manière autonome?
Je sais que je peux le lien Flacon avec Apache ou d'autres serveurs web. Mais, je pensais à l'exécution de Flacon en tant que serveur autonome de servir plusieurs clients en même temps.
Est-ce possible? Dois-je gérer la ponte de plusieurs threads, et à les gérer?
Vous devez vous connecter pour publier un commentaire.
fiole.Flacon.run
accepte de mots-clés supplémentaires arguments (**options
) qu'il transmet àwerkzeug.de servir.run_simple
- deux de ces arguments sontthreaded
(que vous pouvez définir àTrue
pour permettre threading) etprocesses
(que vous pouvez définir pour un nombre supérieur à celui d'avoir werkzeug spawn plus d'un processus pour gérer les demandes). Donc, si vous n':Flacon dira Werkzeug à utiliser filetage et de frayer trois processus pour traiter les demandes entrantes.
Cela étant dit, Werkzeug de
serving.run_simple
encapsule la bibliothèque standard duwsgiref
paquet et le paquet contient une implémentation de référence de WSGI, pas un prêt à la production de serveur web. Si vous allez utiliser la Fiole dans la production (en supposant que la "production" n'est pas un faible trafic interne de l'application avec plus de 10 utilisateurs simultanés) tenez-vous derrière un véritable serveur web (voir la section de la Fiole de docs droit Options De Déploiement pour certaines méthodes suggérées).processes=100
et être heureux avec elle? Dans mon cas, je n'ai besoin que les fichiers statiques, pas de HTTP Post méthodes. Mon exigence est, je veux courir tous Flacon de threads dans le cadre de mes parents app, de sorte que tous peuvent partager des variables.processes=4
, alors il devrait se frayer 100 threads comme pour mon besoin, n'est-ce pas?processes
exécuter N applications simultanées? Si j'utilise globals d'être partagé par les différents points de vue au sein de l'application, ils ne partagent correctement si le processus est 1. J'attends de chacun des N processus à avoir sa propre copie de la globals à partager entre son point de vue, mais pas entre les processus. Même globals au sein d'un processus sont inutilisables siprocesses>1
. Vaflask.g
correctement partager globals simultithreaed=True
ouprocesses=N
pourN>1
?processes=N
lors de l'exécution d'un Flacon application comme un paquet de la ligne de commande?À l'aide de la simple
app.run()
de l'intérieur Flacon crée un seul synchrone serveur sur un seul thread capable de servir un seul client à la fois. Il est prévu pour une utilisation dans des environnements contrôlés avec une demande faible (c'est à dire le développement, le débogage) pour la même raison.La ponte des threads et de la gestion de vous-même est probablement pas pour vous très loin non plus, en raison de le Python GIL.
Cela dit, vous n'avez encore quelques bonnes options. Gunicorn est un solide, facile à utiliser WSGI serveur qui vous permettra de générer plusieurs travailleurs (processus distincts, donc pas de GIL de soucis), et vient même avec asynchrone travailleurs qui augmentera la vitesse de votre application (et de le rendre plus sécurisé) avec peu ou pas de travail de votre part (surtout avec Flacon).
Encore, même Gunicorn ne devrait probablement pas être directement exposée publiquement. En production, il devrait être utilisé derrière un plus robuste serveur HTTP; nginx a tendance à aller bien avec Gunicorn et Flacon.
gunicorn app:app 127.0.0.1:8080
au lieu depython app.py
. Nginx agisse en tant que service public, qui expose votre privé Gunicorn-run app (un reverse-proxy), cacher toutes sortes de bas niveau HTTP détails de mise en œuvre, peut-être servir les fichiers statiques directement, etc.