Celery-Django:Celery vs django管理命令

Dee*_*eyi 8 python django crontab django-celery django-commands

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

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

此外,由于它将是我的django项目和数据库的另一个补充,它是否会降低性能?

Pet*_*zuk 8

我不认为你应该使用芹菜,在你的情况下Cron仍然听起来不错,但你可能想尝试Celery.

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

Celery优于crontab的一些优点:

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

芹菜的一些缺点:

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

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