8

我在一家旅游公司工作,我们需要定期向我们的团队发送邮件。

从现在开始,我一直在使用 django 管理命令并使用 crontabs 运行它们。我正在阅读 celery 可以做什么,但我发现很难理解为什么要使用 celery ?

另外,因为这将是我的 django 项目和数据库的另一个补充,它会降低性能吗?

4

1 回答 1

8

我认为您不应该使用 celery,Cron 在您的情况下对我来说仍然听起来不错,但是您可能想尝试一下 Celery。

对我来说,Celery 是一个用于 [异步] [分布式] 任务队列的 Python 模块。它允许您将冗长的任务分派给在多台机器上运行的多个进程(但一台机器上的一个进程仍然可以)。当您需要做一些需要时间的事情时(例如生成缩略图、与外部 API 对话或生成复杂的报告),您可以使用 Celery 在后台执行此操作,而不会阻止用户的 HTTP 请求。

Celery 相对于 crontab 的一些优势:

  • 您可以异步运行任务,确切地说是在至少有一个 celery worker 空闲时
  • 它确实可以很好地扩展到多个进程/机器
  • celerybeat 就像 crontab;但是您可以在 settings.py 中使用 python 语法在给定的日期时间或时间间隔安排任务
  • 您可以应用速率限制(例如,对于某种优先级)
  • 有像Flower这样的监控工具,可以让您清楚地了解哪些任务失败了,哪些任务成功了

芹菜的一些缺点:

  • 设置可能需要一些时间 - 您必须设置队列代理并妖魔化生产中的工人;cron 已经在那里了
  • 每个工作进程可能使用与您的 Django 进程相同数量的 RAM,这可能会花费您 $ 或者您可能根本没有足够的 RAM 来在 AWS 免费层上运行 Celery

而且,如果只是发送电子邮件,您可以考虑使用付费服务,例如Postmark(我不隶属于他们),它将为您处理电子邮件限制。

于 2013-06-18T14:32:31.747 回答