Luc*_*ang 87 python django celery
我无法理解"分布式任务队列"的用途.例如,python的芹菜库.
我知道在celery,python框架中,你可以设置定时窗口来执行函数.但是,这也可以在针对python脚本的linux crontab中轻松完成.
据我所知,并且从我自己的django-celery webapps中显示,芹菜消耗的RAM内存比设置原始crontab要多得多.一个相对较小的应用程序几百MB差异.
有人可以帮助我这个区别吗?也许对任务队列/ crontabs如何工作的高级解释也很好.
谢谢.
Jos*_*ton 125
这取决于您希望任务执行的内容,是否需要分发它们,以及您希望如何管理它们.
crontab能够每隔N个间隔执行一次脚本.它运行,然后返回.基本上,每个间隔都会有一次执行.您可以直接使用crontab执行django管理命令并访问整个django环境,因此芹菜并不能真正帮助您.
在消息队列的帮助下,芹菜带来的是分布式任务.许多服务器可以加入工作池,每个服务器都可以接收工作项而不必担心双重处理.它也可以在准备就绪后立即执行.使用cron,您至少需要一分钟.
例如,假设您刚刚启动了一个新的Web应用程序,并且您正在接收数百个需要向每个用户发送电子邮件的注册.发送电子邮件可能需要很长时间(相对而言),因此您决定通过任务处理激活电子邮件.
如果您使用的是cron,则需要确保每分钟的cron都能够处理所有需要发送的电子邮件.如果您有多台服务器,您现在需要确保不向同一用户发送多个激活电子邮件 - 您需要某种同步.
使用celery,您可以向队列添加任务.每台服务器可能有几个工作人员,因此您已经在cronjob之前进行了扩展.您可能还有几台服务器允许您进行更多扩展.同步作为"队列"的一部分进行处理.
您可以使用芹菜作为cron替代品,但这并不是它的主要用途.它用于在分布式群集中创建异步任务.
当然,芹菜有一大堆功能,而cron则没有.