为什么使用Celery运行计划任务优于crontab?

时间:2013-08-12 13:05:09

标签: python django celery django-celery

考虑到Celery已经是运行任务队列的堆栈的一部分(即它不仅仅是为了运行crons而添加,这似乎是一种矫枉过正的恕我直言)。

作为crontab的替代品,它的“周期性任务”功能如何才能发挥作用? 具体寻找以下几点。

  • crontab的主要优点/缺点
  • 使用芹菜比crontab更好的选择
  • Django特定用例:Celery与crontab一起运行基于django的周期性任务,当芹菜已作为django-celery包含在堆栈中用于排队django任务。

2 个答案:

答案 0 :(得分:37)

我一直在使用cron作为生产网站,并在当前项目中切换到芹菜。 我更喜欢芹菜而不是cron,这就是原因:

  • Celery + Celerybeat比cron具有更细的粒度。 Cron不能每分钟运行一次以上,而芹菜可以运行(我每90秒运行一次任务,检查电子邮件队列发送邮件,另一项清理在线用户列表)。
  • cron行必须使用绝对路径和用户信息调用脚本或唯一命令。 Celery调用python函数,不需要编写代码。
  • 使用芹菜,要部署到另一台机器,通常只需要拉/复制代码,这通常在一个地方。使用cron进行部署需要更多工作(您可以将其自动化,但是......)
  • 我真的觉得芹菜比cron更适合日常清洁(缓存,数据库),一般来说,用于短期任务。然而,倾倒数据库对于cron来说更像是一项工作,因为你不希望事件队列混乱的任务太长。
  • 不仅如此,Celery很容易在机器上分发。

答案 1 :(得分:3)

当您需要在多台计算机上协调作业时,会指示Celery,确保即使在从工作组添加或删除计算机时也可以运行作业,能够设置作业的到期时间,使用图形样式定义多步骤作业而不是线性依赖流,或者有一个调度逻辑的存储库,它在多个操作系统和版本中运行相同的操作。