分布式任务队列(例如Celery)与crontab脚本

时间:2013-04-26 09:04:04

标签: python django celery

我无法理解“分布式任务队列”的用途。例如,python的celery library

我知道在celery,python框架中,你可以为函数设置定时窗口来执行。但是,这也可以在针对python脚本的linux crontab中轻松完成。

据我所知,并且从我自己的django-celery webapps中显示,芹菜消耗的RAM内存比设置原始crontab要多得多。相对较小的应用程序几百MB差异。

有人可以帮我解决这个问题吗?也许对任务队列/ crontabs如何工作的高级解释也很好。

谢谢。

1 个答案:

答案 0 :(得分:119)

这取决于您希望任务执行的内容,是否需要分发它们,以及您希望如何管理它们。

crontab能够每N个时间间隔执行一次脚本。它运行,然后返回。基本上,每个间隔都会有一次执行。您可以直接使用crontab执行django管理命令并访问整个django环境,因此芹菜并没有真正帮助您。

在消息队列的帮助下,芹菜带来的是分布式任务。许多服务器可以加入工作池,每个服务器都可以接收工作项而不必担心双重处理。它也可以在准备就绪后立即执行。使用cron,你只能被限制在一分钟内。

例如,假设您刚刚推出了一个新的Web应用程序,并且您正在接收数百个需要向每个用户发送电子邮件的注册。发送电子邮件可能需要很长时间(相对而言),因此您决定通过任务处理激活电子邮件。

如果您使用的是cron,则需要确保每分钟的cron都能够处理所有需要发送的电子邮件。如果您有多台服务器,您现在需要确保不向同一用户发送多个激活电子邮件 - 您需要某种同步。

使用celery,您可以向队列添加任务。每台服务器可能有几个工作人员,因此您已经在cronjob之前进行了扩展。您可能还有几台服务器允许您进行更多扩展。同步作为“队列”的一部分进行处理。

可以使用芹菜作为cron替代品,但这并不是它的主要用途。它用于在分布式集群中创建异步任务。

当然,芹菜有big list of features,而cron没有。{/ p>