Celery任务可以重启吗?

时间:2015-04-20 04:26:58

标签: celery

我需要构建一个处理两种类型任务的系统。一种类型可以创建更多自己或另一种类型的任务。工人很少(2-3),只有一个主人。最重要的要求是系统应该优雅地处理重新启动:即,在重新启动时,正在进行的任务应该从头开始,工作人员应该选择在重新启动之前排队的任务。 看看芹菜它似乎适合这个用例。但是,我有几个问题:

1)Celery是否能够按照描述处理整个系统的重启? (芹菜+工人+经纪人,一切都重新启动,完全断电)。

2)在这种情况下使用的最佳代理是什么?我更喜欢SQLAlchemy + SQLite,因为它更“自包含”,但如果RabbitMQ是正确的选择,鉴于需要优雅地处理完全重启,那么我可以继续使用它。

1 个答案:

答案 0 :(得分:13)

1)Celery是否能够按照描述处理整个系统的重启? (芹菜+工人+经纪人,一切都重新启动,完全断电)。

  

是的,当您在RabbitMQ上创建自己的队列时(持久   队列)即使重启服务器后任务也将如此   恢复并将由芹菜进行。

2)在这种情况下使用的最佳代理是什么?我更喜欢SQLAlchemy + SQLite,因为它更“自包含”,但如果RabbitMQ是正确的选择,鉴于需要优雅地处理完全重启,那么我可以继续使用它。

  

使用RabbitMQ。我们正在使用RabbitMQ + Celery进行生产。所以我愿意   建议您使用RabbitMQ作为经纪人。

Celery + RabbitMQ Best Practice

Message Reliability

注意:

  1. 使用更多队列(即不仅仅是默认队列)
  2. 使用优先工作者
  3. 使用Celery的错误处理机制