我之前从未使用芹菜,而且我也是django新手,所以我不确定是否应该在我的项目中使用芹菜。
我项目的简要说明:
有一个用于将(通过SSH)作业发送到科学计算集群的API。 API是对不同科学作业队列供应商的抽象。 http://saga-project.github.io/saga-python/ 我的项目基本上是用django为这个API做一个Web GUI。
所以,我担心的是,如果我使用芹菜,我会在本地Web服务器中有一个队列,而在每个远程集群中都有一个队列。我担心这会不必要地使实施复杂化。
API仍处于开发阶段,部分功能尚未完全完成。有一个函数用于检查远程作业执行的状态(运行,完成等),但状态更改的回调支持尚未就绪。这是我认为芹菜可能适合的地方。我会有一个或几个定期任务监控工作状态。
有关如何继续的建议吗?没有芹菜?芹菜什么的?芹菜只是为了工作状态?
答案 0 :(得分:2)
我使用芹菜用于类似目的,效果很好。基本上我有一个节点运行芹菜工作者来管理整个集群。这些工作人员为集群节点生成输入数据,分配任务,处理结果以进行报告或生成相关任务。
每个群集节点都运行一个非常小的python服务器,该服务器获取其分配的作业的db id。然后它调用main(http)服务器来请求它需要的数据,并在完成后最终发回数据。就我而言,各个节点不需要相互发送消息,每个任务的运行时间很长(小时)。这使得中央管理层和民意调查引起的延误无关紧要。
可以在每个节点上运行芹菜工作者直接从消息队列中获取任务。这种方法很有吸引力。但是,我有一个复杂的依赖项,更容易从集中控制中解决。此外,我有时需要对群集进行分段,集中控制可以实现这一点。
芹菜不擅长管理优先级或恢复丢失的任务(中央控制的更多理由)。
感谢您关注SAGA。我现在正在看它,看它是否对我有用。
答案 1 :(得分:1)
Celery对于执行在HTTP请求的处理程序(即Django视图)中执行过于昂贵的任务非常有用。考虑从Django视图向一些远程Web服务器发出HTTP请求,并考虑延迟,可能的超时,数据传输的时间等。排队计算密集型任务也需要花费很多时间来使用Celery进行后台执行。
我们只能猜测API的Web GUI应该做什么。然而,Celery非常适合排队对科学计算集群的请求。它还允许跟踪后台任务的状态及其结果。
我不明白您对在不同服务器上拥有多个队列的担忧。您可以在同一台服务器上安装Django,Celery代理(实现任务队列)和工作进程(使用队列并执行Celery任务)。