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

2024-03-22

我无法理解“分布式任务队列”的用途。例如,python 的芹菜库 http://www.celeryproject.org/.

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

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

有人可以帮我区分这个区别吗?也许对任务队列/ crontabs 一般如何工作的高级解释也很好。

谢谢。


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

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

celery 在消息队列的帮助下带来的是分布式任务。许多服务器可以加入工作人员池,并且每个服务器都会接收一个工作项目,而不必担心双重处理。也可以在任务准备好后立即执行它。使用 cron 时,您的时间限制为至少一分钟。

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

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

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

You can使用 celery 作为 cron 的替代品,但这并不是它的主要用途。它用于跨分布式集群分派异步任务。

当然,芹菜还有一个作用一大功能列表 http://docs.celeryproject.org/en/master/getting-started/introduction.html#features那个 cron 没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式任务队列(例如 Celery)与 crontab 脚本 的相关文章

随机推荐