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

标签 python django celery

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

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

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

有人可以帮我解决这个问题吗?或许对任务队列/crontab 的一般工作方式进行高级解释也会很好。

谢谢。

最佳答案

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

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

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

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

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

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

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

当然, celery 有一个 big list of features那个 cron 没有。

关于python - 分布式任务队列(例如 Celery)与 crontab 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16232572/

相关文章:

python - 不显示输入字段的 Django 表单

python - 使用 Amazon EC2 自动缩放 Python Celery

django - Amazon SQS 和 celery 事件(不可序列化的 JSON)

python - 如何 : Redis in production server

python - Celery 与 Django - 部署

python - 将标准错误直接发送到同一文件和标准输出?

python - 如何在 Django 1.4 中自定义管理过滤器

linux - 以根用户身份运行 celery

python - 从列表中删除值

python - 根据相似的两列对 pandas 数据框进行排序,但如果另一列具有值,则其中一列将为 NaN