gpt4 book ai didi

python - Flask 中每个客户请求的单独数据

转载 作者:行者123 更新时间:2023-11-28 22:35:49 26 4
gpt4 key购买 nike

我创建了一个 flask 应用程序,它打开数据库连接并将一些数据存储在全局变量中。这些全局变量中的数据被页面​​中后续的ajax请求使用。但是我遇到了严重的并发问题。我尝试同时使用 uwsgi 和 gunicorn 来运行 flask 应用程序(并且两者都得到了相同的结果)。这是我在两次运行中的配置

1) 4个 worker

2) 多线程 = 在 flask 中为真。

当 2 个用户使用该应用程序时(返回的数据特定于用户输入的几个选项),发生的情况是,有时另一个用户请求的数据会进入我的应用程序实例,有时则相反.

我的假设是我的应用程序从中获取数据的工作器不断变化。我对 gunicorn 和 uwsgi 中的 worker 模型不是很确定。有人能告诉我如何确保用户只获得他请求的数据吗?(提醒:他请求的数据存储在 python 的全局变量中,在 ajax 请求中,这个对象被传递给HTML)。任何帮助将不胜感激。

我已经阅读了有关请求上下文的内容,但完全不知道如何去做

@app.route("/"):
def redir():
global a;
#assume this is only for post(from a ajax call)
a = #some data built from a database based on the options from the page where the post was made
return jsondumps({'data':a[0:100]});

@app.route("/next100")
def next100():
global a;
# return the next 100 records of the global variable a.
return jsondumps({'data':a[100:200]});

预期的是用户向 redir() 函数发出第一个 ajax 请求,然后在不同的 ajax 调用中调用 next100() 并返回数据。当只有一个用户时,上述情况不会出现任何问题。

当有 2 个用户并且他们都调用了 redir() 并且当他们继续调用 next100() 时,两个用户随机从全局“a”变量中获取数据(有时来自用户 1 的上下文,有时来自用户 2 的)

最佳答案

正如 bakkal 指出的那样,全局变量在使用线程时会中断。

相反,您可以为用户提供一个包含您要保留的数据的 cookie:

session["a"] = "a" # or whatever

当然这不会无限扩展,因此如果您有大量数据,您应该在 cookie 中存储一些(数据库) session 信息并从数据库加载信息。

有关 flask.session 的更多信息,请阅读 the documentation .

flask.g 实际上是在单个请求中从不同的函数传递信息,而不是在单个 session 中从不同的请求传递信息。

关于python - Flask 中每个客户请求的单独数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37943243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com