gpt4 book ai didi

python - 如何在我的 Flask 服务中管理请求队列?

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:23 25 4
gpt4 key购买 nike

我正在使用 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'

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

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

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

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

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

最佳答案

我从来没有找到使用内置队列在进程之间共享工作队列的好方法。我的意思是 gunicorn/uwsgi 进程不是经理/ worker 。

我的建议是使用像 redis 或 rabbit mq 这样的东西来分配工作负载。有几个框架可以做到这一点,例如 celery 或仅使用 pika。这将使您的应用程序在方式。能够按您需要的规模在不同的实例上分发 API、工作队列和工作人员。

关于python - 如何在我的 Flask 服务中管理请求队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49461727/

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