小编Sav*_*nda的帖子

如何管理 Flask 服务中的请求队列?

我正在使用 Flask 从用户那里获取 POST 请求并处理数据而不返回任何响应。

要处理用户请求,我目前拥有的解决方案是:

def process_data(request_data):
    # do_the_processing will process the data 
    do_the_processing(request_data)
    # Terminate the spawned process
    sys.exit(0)

@app.route('/', methods =['POST'])
def index():
    request_data = request.get_json()
    p = Process(target=process_data, args=(request_data,))
    p.start()
    return '200'
Run Code Online (Sandbox Code Playgroud)

但这将为每个用户请求生成一个新进程。如果 1000 个用户同时向服务发出请求会怎样。操作系统将无法处理这么多进程。我准备让用户等到轮到他们进入队列。do_the_processing 方法使用另一个 Web API 来处理数据,然后在内存中写入文件。

我需要维护一个队列,我可以在请求到达时将其放入其中,然后以先到先得的方式处理 request_data。

为了增加处理量,我们可以使用 4 个进程从队列中获取数据并进行处理。处理完数据后,我们将从队列中获取另一个数据并对其进行处理,但问题是我们应该只使用 4 个进程来进行处理。

如果 1000 个用户向服务器发出请求,当前的解决方案将产生 1000 个进程。

我怎样才能实现这种类型的功能,有什么想法吗?

python multiprocessing flask

7
推荐指数
1
解决办法
4120
查看次数

标签 统计

flask ×1

multiprocessing ×1

python ×1