同时处理 Flask 请求和 thread = True

threaded = True传递给 app.run()到底是做什么的?

我的应用程序处理来自用户的输入,并且需要一点时间。在此期间,应用程序无法处理其他请求。我已经用 threaded=True测试了我的应用程序,它允许我同时处理多个请求。

85811 次浏览

我的应用程序能够同时处理多少个请求?

这在很大程度上取决于您的应用程序。每个新请求都会启动一个线程——这取决于您的机器能够处理多少个线程。我没有看到限制线程数量的选项(比如在生产部署中提供的 uwsgi)。

用这个有什么坏处?如果我不期望同时有多个请求,我能继续使用这个吗?

从单线程切换到多线程可能导致并发 bug... ... 如果您使用这种方法,请注意如何处理全局对象(请参阅文档中的 g 对象!)和国家。

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

在1.0之前,或者如果禁用线程,服务器将以单线程模式运行,一次只能处理一个请求。任何并行请求都必须等到可以处理之后才能执行,如果您使用 试图通过请求与自己的服务器联系,这可能会导致问题。

threaded=True中,每个请求都在一个新线程中处理。服务器可以并发处理多少个线程完全取决于操作系统以及它对每个进程的线程数设置的限制。这个实现使用 SocketServer.ThreadingMixIn,它不限制它可以旋转的线程数量。

请注意 Flask 服务器是为 只限发展设计的。它是 没有生产就绪的服务器。不要依赖它在更广阔的网络上运行你的网站。使用适当的 WSGI 服务器(如 枪角兽UWSGI)。