0

我以前从未使用过 celery,而且我也是 django 新手,所以我不确定是否应该在我的项目中使用 celery。

我的项目的简要说明:

有一个 API 用于发送(通过 SSH)作业到科学计算集群。API 是对不同科学作业队列供应商的抽象。http://saga-project.github.io/saga-python/ 我的项目基本上是用 django 为这个 API 做一个 web GUI。

所以,我担心的是,如果我使用 celery,我会在本地 Web 服务器中有一个队列,而在每个远程集群中都有另一个队列。恐怕这可能会使实施变得不必要地复杂化。

API 仍在开发中,一些功能还没有完全完成。有一个用于检查远程作业执行状态(正在运行、已完成等)的功能,但尚未准备好对状态更改的回调支持。这是我认为芹菜可能合适的地方。我会有一项或多项定期任务来监控工作状态。

请对如何进行有任何建议?没有芹菜吗?芹菜什么都有?芹菜只是为了工作状态?

4

2 回答 2

2

我将芹菜用于类似目的,效果很好。基本上我有一个节点运行管理整个集群的芹菜工人。这些工作人员为集群节点生成输入数据、分配任务、处理结果以报告或生成相关任务。

每个集群节点都运行一个非常小的 python 服务器,它获取分配给它的作业的 db id。然后它调用主(http)服务器来请求它需要的数据,最后在完成时将数据发回。就我而言,各个节点不需要相互发送消息,并且每个任务的运行时间非常长(数小时)。这使得中央管理和投票带来的延迟微不足道。

可以在每个节点上运行一个 celery worker,直接从消息队列中获取任务。这种方法很有吸引力。但是,我有复杂的依赖关系,这些依赖关系更容易从集中控制中解决。此外,我有时需要对集群进行分段,而集中控制使这成为可能。

Celery 不擅长管理优先级或恢复丢失的任务(中央控制的更多原因)。

感谢您让我关注 SAGA。我现在正在看它,看看它是否对我有用。

于 2013-09-18T17:08:21.747 回答
1

Celery 对于执行在 HTTP 请求的处理程序(即 Django 视图)中执行成本太高的任务很有用。考虑从 Django 视图向某个远程 Web 服务器发出 HTTP 请求,并考虑延迟、可能的超时、数据传输时间等。使用 Celery 将需要大量时间用于后台执行的计算密集型任务排队也是有意义的。

我们只能猜测 API 的 Web GUI 应该做什么。然而,Celery 非常适合将请求排队到科学计算集群。它还允许跟踪后台任务的状态及其结果。

我不明白您对在不同服务器上有许多队列的担忧。您可以在同一台服务器上拥有 Django、Celery 代理(为任务实现队列)和工作进程(使用队列和执行 Celery 任务)。

于 2013-09-18T09:45:13.457 回答