46

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

作为 crontab 的替代品,它的“周期性任务”功能如何带来好处?具体寻找以下几点。

  • crontab 的主要优点/缺点
  • celery 比 crontab 更好的用例
  • Django 特定用例:Celery 与 crontab 运行基于 django 的周期性任务,当 celery 已包含在堆栈中以django-celery用于排队 django 任务时。
4

2 回答 2

48

我一直在将 cron 用于生产网站,并在当前项目中切换到 celery。我比 cron 更喜欢 celery,原因如下:

  • Celery + Celerybeat 比 cron 粒度更细。Cron 不能每分钟运行一次以上,而 celery 可以(我有一个任务每 90 秒运行一次,它检查一个电子邮件队列以发送消息,另一个清理在线用户列表)。
  • cron 行必须调用带有绝对路径和用户信息的脚本或唯一命令。Celery调用python函数,无需多写代码。
  • 使用 celery,要部署到另一台机器,您通常只需提取/复制您的代码,这通常在一个地方。使用 cron 部署需要更多的工作(你可以自动化它但是......)
  • 我真的发现 celery 比 cron 更适合日常清理(缓存、数据库),一般来说,更适合短期任务。但是,转储数据库对于 cron 来说更像是一项工作,因为您不希望事件队列因太长的任务而变得混乱。
  • 最重要的是,Celery 很容易分布在机器上。
于 2013-08-12T14:45:03.783 回答
3

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

于 2013-08-26T19:25:52.350 回答