分布式任务队列(Ex。Celery)vs crontab脚本

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

我知道,在芹菜,python框架,你可以设置定时的窗口function来执行。 然而,这也可以很容易地在一个Python脚本的linux crontab中完成。

据我所知,从我自己的django芹菜webapps显示,芹菜消耗更多的RAM内存比只是build立一个原始的crontab。 一个相对较小的应用程序几百MB差异。

有人能帮我这个区别吗? 也许关于任务队列/ crontabs如何工作的高层次的解释也是很好的。

谢谢。

这取决于你想要做什么,如果你需要分配他们,你想如何pipe理他们。

一个crontab能够每N个间隔执行一次脚本。 它运行,然后返回。 基本上你会得到一个单一的执行每个间隔。 你可以直接指定一个crontab来执行一个djangopipe理命令,并且可以访问整个django环境,所以芹菜在这里并没有真正的帮助你。

芹菜在消息队列的帮助下带来的是分配任务。 许多服务器可以join工作人员的队伍,每个人都可以收到工作项目,而不用担心双重处理。 一旦准备就绪,也可以执行任务。 用cron,你至less要等一分钟。

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

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

使用芹菜,您可以将任务添加到队列中。 你可能每台服务器有几个工人,所以你已经在cronjob之前进行了缩放。 你也可能有几台服务器,可以让你缩放更多。 同步是作为“队列”的一部分处理的。

可以使用芹菜作为cron替代品,但这不是真正的主要用途。 它用于通过分布式集群进行asynchronous任务的挖掘。

当然,芹菜有很多cron没有的function 。