我有以下场景:
- 后端=>地理空间数据库和Open Data Cube工具
- API=>用户可以定义参数(xmin、xmax、ymin、ymax(以进行GET请求
- 进程=>每次请求都会计算分析并通过卫星图像像素值会返回给用户
我的问题如下:由于进程相当繁重(可以保留许多GB的RAM(,如何同时处理多个请求?有没有队列可以保存请求并依次为每个请求提供服务?
语言/框架=>Python 3.8和Django
提前感谢
Celery+Rabbitmq/Redis可能就是您所需要的。在这种配置中,您的繁重过程变成";任务";。当使用.delay()
调用时,它们会进入队列,不再由主进程处理。
你可能想查看芭蕾舞裙
https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html
有许多异步消息队列技术允许您这样做,其中许多技术也有Python API。
您可能想使用请求-响应消息,将收到的请求与要发送的回复关联起来。
消息排队技术将允许您接受请求,将它们存储在队列中,并让服务器在准备好时处理它们。将请求存储在队列中意味着它们不会丢失。这也允许您的应用程序扩展——随着更多请求的到来,它们可以由多个应用程序实例处理,但仍然只返回一个结果!
上面的答案推荐了芹菜,这是这类项目的一个很好的选择。根据您的需求,您还可以使用pymqi:https://dsuch.github.io/pymqi/examples.html或者ZeroMQ:(这里的示例用于使用请求-响应模式(ZeroMQ-如果您需要更重负载的技术,可以使用多个发布服务器和侦听器。