这取决于您希望您的任务做什么,是否需要分配它们,以及您希望如何管理它们。
crontab 能够每 N 个间隔执行一次脚本。它运行,然后返回。本质上,您每个间隔都会执行一次。您可以只指示 crontab 执行 django 管理命令并访问整个 django 环境,因此 celery 并不能真正帮助您。
celery 在消息队列的帮助下带来了分布式任务。许多服务器可以加入工作人员池,每个服务器都会收到一个工作项,而不必担心重复处理。也可以在准备就绪后立即执行任务。使用 cron,您被限制为至少一分钟。
例如,假设您刚刚启动了一个新的 Web 应用程序,并且您收到了数百个需要向每个用户发送电子邮件的注册。发送电子邮件可能需要很长时间(相对而言),因此您决定通过任务处理激活电子邮件。
如果您使用的是 cron,则需要确保每分钟 cron 都能够处理所有需要发送的电子邮件。如果您有多个服务器,您现在需要确保您没有向同一用户发送多封激活电子邮件 - 您需要某种同步。
使用 celery,您可以将任务添加到队列中。每台服务器可能有多个工作人员,因此您已经在 cronjob 之前进行了扩展。您可能还拥有多台服务器,可让您进行更多扩展。同步作为“队列”的一部分处理。
您可以使用 celery 作为 cron 替代品,但这并不是它的主要用途。它用于跨分布式集群分出异步任务。
当然,celery 有很多cron 没有的特性。