88 votes

Traiter les demandes Flask simultanément avec threaded=True

Que signifie exactement passer threaded = True a app.run() faire ?

Mon application traite les données de l'utilisateur et prend un peu de temps pour le faire. Pendant ce temps, l'application est incapable de traiter d'autres demandes. J'ai testé mon application avec threaded=True et cela me permet de traiter plusieurs demandes simultanément.

115voto

Martijn Pieters Points 271458

Depuis la version 1.0 de Flask, le serveur WSGI inclus avec Flask est exécuté en mode threadé par défaut.

Avant la version 1.0, ou si vous désactivez le threading, le serveur est exécuté en mode monofil et ne peut traiter qu'une seule demande à la fois. Toutes les demandes parallèles devront attendre jusqu'à ce qu'elles puissent être traitées, ce qui peut entraîner des problèmes si vous a essayé de contacter son propre serveur à partir d'une requête .

Con threaded=True sont chacune traitées dans un nouveau fil de discussion. Le nombre de threads que votre serveur peut gérer simultanément dépend entièrement de votre système d'exploitation et des limites qu'il fixe au nombre de threads par processus. L'implémentation utilise la fonction SocketServer.ThreadingMixIn classe qui ne fixe aucune limite au nombre de fils qu'il peut faire tourner.

Notez que le serveur Flask est conçu pour développement uniquement . Il est pas un serveur prêt pour la production. Ne comptez pas sur lui pour faire fonctionner votre site sur le Web. Utilisez un serveur WSGI approprié (comme gunicorn o uWSGI ) à la place.

3 votes

Les seules personnes qui utiliseront mon application sont quelques personnes de mon bureau. Est-il possible de la conserver dans cet état ?

8 votes

@Harrison : alors c'est bien, à moins que ces personnes ne soient susceptibles d'essayer de pirater ou de DDOS votre machine.

1 votes

Je peux leur faire entièrement confiance. La probabilité que plusieurs personnes utilisent l'application en même temps est relativement faible, donc je pense que pour l'instant je vais juste la laisser tourner sur le serveur Flask. À quel moment pensez-vous que ce serait une bonne décision de déployer en utilisant gunicorn ?

10voto

Paul Becotte Points 953

Combien de demandes mon application pourra-t-elle traiter simultanément avec cette déclaration ?

Cela dépend fortement de votre application. Un thread sera lancé pour chaque nouvelle demande - cela dépend du nombre de threads que votre machine peut gérer. Je ne vois pas d'option pour limiter le nombre de threads (comme uwsgi le propose dans un déploiement de production).

Quels sont les inconvénients de cette méthode ? Si je n'attends pas plus que quelques demandes simultanées, puis-je continuer à l'utiliser ?

Le passage d'un thread unique à un thread multiple peut entraîner des problèmes de concurrence... si vous utilisez cette méthode, faites attention à la façon dont vous gérez les objets globaux (voir l'objet g dans la documentation !) et l'état.

0 votes

Ok, merci. Vous avez définitivement éclairci ce point pour moi. Dans ma question sur le nombre de requêtes qu'il peut gérer, je me demandais si thread = true permet simplement une x le nombre de demandes à traiter simultanément. Donc c'est déterminé par ma machine ?

1 votes

Je n'utilise jamais le serveur de développement, donc ma réponse n'est pas définitive, cependant, il ne semble pas avoir de limite définie... donc infini (selon les ressources du système). J'exécute mes applications en utilisant uWSGI, qui a une limite de threads configurable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X