python flask thread true不工作

Vis*_*hnu 2 python multithreading flask

随着threaded=True请求每一个新的线程来处理.但是,如果我将thread true设置为我的应用程序,它将显示未知行为.

这是我的代码.

from flask import Flask
from flask import jsonify
import time

app = Flask("proxapp")

import datetime

@app.route('/slow')
def slow():
    start = datetime.datetime.now()
    time.sleep(10)
    return jsonify(start = start, end = datetime.datetime.now())


try:
    app.run(threaded=True)
except Exception, e:
    print repr(e)
Run Code Online (Sandbox Code Playgroud)

我在Windows中打开了两个选项卡,并尝试在不同的选项卡中请求相同的URL.只有在提供第一个请求后才会提供第二个请求.第二个请求需要大约20秒才能完成.

我的代码有什么问题?

Kai*_*Kai 5

从关于部署选项的烧瓶文档

虽然重量轻且易于使用,但Flask的内置服务器不适合生产,因为它不能很好地扩展,默认情况下一次只能提供一个请求.此处记录了可用于在生产中正确运行Flask的一些选项.

这就是为什么你的第二个请求在第一个请求完成之前没有发生的原因,因为它自己的烧瓶服务器一次只能处理一个请求.要解决这个问题,您需要在某种部署服务器上运行Flask,例如gunicornuWSGI,它们似乎是最受欢迎的.

您也可能会发现这个这个问题的答案有帮助. 部署选项还有许多链接指南和有关解决问题的不同方法的信息.

  • 您引用的文字说:"默认情况下,一次只能提供一个请求".OP通过指定`threaded = True`来覆盖默认行为. (8认同)

Bej*_*ian 5

I cant seem to find my reference but I recall reading from another SO post why two tabs from the same browser fail when requesting form the same route despite threaded=True.

这篇文章的要点是,虽然线程可以更好地处理同一应用程序的多个连接,但浏览器本身将尝试重用任何已打开的连接。因此,通过两个选项卡设置,您可以从不同的路由请求,并且工作正常,但如果您从同一路由请求,您将遇到问题,因为浏览器会回收连接。尝试打开两个不同的浏览器并进行测试。我再次为没有原始参考文献而道歉,我想给予作者信任。如果我找到它,我会更新这篇文章。