使用threaded = True同时处理Flask请求

Har*_*son 51 python flask

究竟是通过threaded = Trueapp.run()吗?

我的应用程序处理来自用户的输入,并花费一些时间来完成.在此期间,应用程序无法处理其他请求.我已经测试了我的应用程序,threaded=True它允许我同时处理多个请求.

Mar*_*ers 71

从Flask 1.0开始,Flask附带的WSGI服务器默认以线程模式运行.

在1.0之前,或者如果禁用线程,服务器以单线程模式运行,并且一次只能处理一个请求.任何并行请求都必须等到可以处理它们,如果您尝试从请求联系您自己的服务器,这可能会导致问题.

随着threaded=True请求每一个新的线程来处理.您的服务器可以同时处理多少个线程完全取决于您的操作系统以及它对每个进程的线程数设置的限制.该实现使用了SocketServer.ThreadingMixIn,它对可以旋转的线程数没有限制.

请注意,Flask服务器用于开发.它不是生产就绪的服务器.不要依赖它在更广泛的网络上运行您的网站.使用适当的WSGI服务器,如gunicornuWSGI).

  • @Harrison:那很好,除非那些人有可能试图破解或DDOS你的机器. (4认同)
  • 将要使用我的应用程序的仅有的几个人是我办公室中的少数几个人。保持这种状态可以吗? (2认同)
  • @Harrison:您希望将其打开到更广泛的网络的那一刻,或者您认为您需要更好地控制您希望服务器使用多少资源.专用的WSGI服务器可以控制并发数量,也可以使用多个进程来分配负载. (2认同)
  • @variable:不,那是不正确的。Flask 是一个 [WSGI 框架](https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface),由 WSGI 服务器决定如何处理并发。为了方便起见,Flask 确实附带了一个[开发服务器](https://flask.palletsprojects.com/en/1.1.x/cli/#run-the-development-server),它使用单个进程和线程,但那就是不是唯一的选择,并且您确实希望在其他地方使用[适当的生产级部署](https://flask.palletsprojects.com/en/1.1.x/deploying/#deployment)。 (2认同)

Pau*_*tte 6

我的应用程序可以与此语句同时处理多少个请求?

这在很大程度上取决于您的应用程序。每个新请求都会启动一个线程-这取决于您的计算机可以处理多少个线程。我看不到限制线程数量的选项(例如生产部署中的uwsgi提供)。

使用此功能有什么缺点?如果我不希望同时收到多个请求,我可以继续使用它吗?

从单线程切换到多线程可能会导致并发错误……如果使用此方法,请谨慎处理全局对象(请参阅文档中的g对象!)和状态。