开发者社区> 问答> 正文

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

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

我知道在celery(Python框架)中,您可以为要执行的功能设置定时窗口。但是,这也可以在针对python脚本的linux crontab中轻松完成。

据我所知,并通过我自己的django-celery网络应用显示,celery所消耗的RAM内存比仅仅设置一个原始crontab还要多。对于相对较小的应用程序,相差几百MB。

有人可以帮我这个区别吗?总体上讲,关于任务队列/ crontabs如何工作的高级解释也许也不错。

谢谢。

展开
收起
祖安文状元 2020-02-23 15:35:00 1131 0
1 条回答
写回答
取消 提交回答
  • 这取决于您希望任务执行的操作,是否需要分发任务以及如何管理它们。

    crontab能够每N个间隔执行一次脚本。它运行,然后返回。从本质上讲,您每个时间间隔都会执行一次。您只需指挥crontab即可执行django管理命令并获得对整个django环境的访问权限,因此celery并不能真正为您提供帮助。

    在消息队列的帮助下,芹菜带到桌子上的是分布式任务。许多服务器可以加入工作人员池,并且每个服务器都可以接收工作项,而不必担心双重处理。准备就绪后,也可以立即执行任务。使用cron时,您的时间不得超过一分钟。

    举例来说,假设您刚刚启动了一个新的Web应用程序,并且正在接收数百次注册,这些注册需要向每个用户发送电子邮件。发送电子邮件可能需要较长的时间(相对),因此您决定要通过任务处理激活电子邮件。

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

    使用芹菜,您可以将任务添加到队列中。每个服务器上可能有几个工作人员,所以您已经在进行cronjob之前进行了扩展。您可能还拥有多个服务器,可以扩展更多服务器。同步作为“队列”的一部分进行处理。

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

    当然,芹菜具有大量 cron所没有的功能。

    2020-02-23 15:35:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于社区的分布式 风险感知模型 立即下载
如何利用Redisson分布式化传统Web项目 立即下载
FLASH:大规模分布式图计算引擎及应用 立即下载