Flask中如何分别处理多用户的请求?

YQ.*_*ang 4 python flask

我编写了以下烧瓶服务器:

from flask import Flask, render_template, request
import os

app = Flask(__name__)
# home
@app.route('/')
def home():
    return 'HOME PAGE'

@app.route('/add')
def add():
    global a
    a += 1
    return str(a)

if __name__ == '__main__':
    a = 0
    HOST = '10.10.10.10'
    PORT = 5555
    app.run(HOST, PORT)
Run Code Online (Sandbox Code Playgroud)

考虑到我的服务器有两个用户(来自不同的IP地址):A和B。当用户A通过 url 请求时10.10.10.10:5555/add,他得到结果1。之后,如果用户 B 通过 url 请求,10.10.10.10:5555/add他将得到2. 因为两个用户共享同一个变量a

但是,我希望我的服务器单独处理 A 和 B,这意味着用户 A 和 Ba以自己的方式拥有变量。A的请求不应该影响B得到的结果。例如,当用户 A 请求时,他得到1。在用户 B 请求之后,他1也应该得到。

我应该如何修改我的代码来实现这一目标?

Bil*_*fri 6

根据您的问题,我认为您对“全球”的定义感到困惑。

在 Flask 中,您有一个具有多个线程和可能处理请求的多个进程的 Flask 服务器。你有一个全局变量a,你想在每个请求中不断添加它,并希望变量是独立的。这在理论上和实践中都是完全可能的。这也是一个非常糟糕的主意。这种情况实际上会造成死锁

问题是您无法轻松控制哪些线程和进程“获胜”

您应该使网络服务器本身尽可能保持无状态。每个请求应该完全独立,不共享服务器中的任何状态。相反,使用数据库或缓存层来为您处理状态。这看起来比较复杂,但实际上更简单。例如,查看 SQLite;这很简单。