首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分布式任务队列(例如Celery)与crontab脚本

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

Stack Overflow用户
提问于 2013-04-26 17:04:04
回答 1查看 15.8K关注 0票数 103

我在理解“分布式任务队列”的目的时遇到了麻烦。例如,python的celery library

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

据我所知,从我自己的django-celery webapps可以看出,celery比仅仅设置一个原始的crontab消耗更多的RAM内存。对于一个相对较小的应用程序来说,有几百MB的差异。

有没有人能帮我区分一下?也许对任务队列/crontab一般如何工作的高级解释也会很好。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 18:50:13

这取决于您希望您的任务做什么,是否需要分发它们,以及您希望如何管理它们。

crontab能够每隔N个间隔执行一次脚本。它运行,然后返回。从本质上讲,您在每个时间间隔都会得到一次执行。您可以直接使用crontab来执行django管理命令,并获得对整个django环境的访问权限,因此celery在这方面对您没有真正的帮助。

在消息队列的帮助下,celery带来的是分布式任务。许多服务器可以加入工作进程池,每个服务器都可以接收一个工作项,而不用担心重复处理。也可以在任务准备就绪时立即执行任务。使用cron,您被限制为最少一分钟。

举个例子,假设你刚刚启动了一个新的web应用程序,并且你收到了数百个需要发送电子邮件给每个用户的注册信息。发送电子邮件可能需要很长时间(相比较而言),因此您决定通过任务来处理激活电子邮件。

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

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

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

当然,芹菜有一个cron没有的big list of features

票数 150
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16232572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档