web-dev-qa-db-fra.com

Handle Flask demande en même temps avec threaded = True

Que fait exactement le passage de threaded = True À app.run()?

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

47
Harrison

A partir de Flask 1.0, 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 mono-threadé et ne peut gérer qu'une requête à la fois. Toute demande parallèle devra attendre jusqu’à ce qu’elle puisse être traitée, ce qui peut poser problème si vous avez essayé de contacter votre propre serveur à partir d’une demande .

Avec threaded=True les requêtes sont chacune gérées dans un nouveau thread. 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 définit en ce qui concerne le nombre de threads par processus. L'implémentation utilise le SocketServer.ThreadingMixIn class , qui ne définit aucune limite quant au nombre de threads qu’il peut lancer.

Notez que le serveur Flask est conçu pour développement uniquement. n'est pas un serveur prêt pour la production. Ne comptez pas dessus pour faire fonctionner votre site sur le Web au sens large. Utilisez plutôt un serveur WSGI approprié (tel que gunicorn ou WSGI ).

64
Martijn Pieters

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

Cela dépend énormément de votre application. Un nouveau thread sera lancé pour chaque nouvelle requête. Cela dépend du nombre de threads que votre machine peut gérer. Je ne vois pas d’option permettant de limiter le nombre de threads (comme dans les offres uwsgi dans un déploiement en production).

Quels sont les inconvénients à utiliser cela? Si je n'attends pas plus de quelques demandes simultanément, puis-je continuer à l'utiliser?

Passer d'un seul thread à un multi-thread peut entraîner des problèmes de concurrence ... si vous l'utilisez, faites attention à la façon dont vous gérez les objets globaux (voir l'objet g dans la documentation!) Et à l'état.

5
Paul Becotte