Sav*_*nda 7 python multiprocessing 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 个进程。
我怎样才能实现这种类型的功能,有什么想法吗?
小智 1
我从未找到使用内置队列在进程之间共享工作队列的好方法。我的意思是gunicorn/uwsgi 进程而不是经理/工人。
我的建议是使用 redis 或rabbit mq 之类的东西来分配工作负载。有几种框架可以实现此目的,例如 celery 或仅使用 pika。这将以某种方式构建可扩展的应用程序。能够按照您需要的规模在不同的实例上分发 API、工作队列和工作线程。
| 归档时间: |
|
| 查看次数: |
4120 次 |
| 最近记录: |