我在理解“分布式任务队列”的目的时遇到了麻烦。例如,python的celery library。
我知道在python框架celery中,您可以为要执行的函数设置定时窗口。不过,这也可以在针对python脚本的linux crontab中轻松完成。
据我所知,从我自己的django-celery webapps可以看出,celery比仅仅设置一个原始的crontab消耗更多的RAM内存。对于一个相对较小的应用程序来说,有几百MB的差异。
有没有人能帮我区分一下?也许对任务队列/crontab一般如何工作的高级解释也会很好。
谢谢。
发布于 2013-04-26 18:50:13
这取决于您希望您的任务做什么,是否需要分发它们,以及您希望如何管理它们。
crontab能够每隔N个间隔执行一次脚本。它运行,然后返回。从本质上讲,您在每个时间间隔都会得到一次执行。您可以直接使用crontab来执行django管理命令,并获得对整个django环境的访问权限,因此celery在这方面对您没有真正的帮助。
在消息队列的帮助下,celery带来的是分布式任务。许多服务器可以加入工作进程池,每个服务器都可以接收一个工作项,而不用担心重复处理。也可以在任务准备就绪时立即执行任务。使用cron,您被限制为最少一分钟。
举个例子,假设你刚刚启动了一个新的web应用程序,并且你收到了数百个需要发送电子邮件给每个用户的注册信息。发送电子邮件可能需要很长时间(相比较而言),因此您决定通过任务来处理激活电子邮件。
如果您使用的是cron,则需要确保cron每分钟都能够处理所有需要发送的电子邮件。如果你有多个服务器,你现在需要确保你不会向同一个用户发送多封激活邮件--你需要某种形式的同步。
使用celery,您可以向队列中添加任务。您的每台服务器可能有多个工作进程,因此您已经在cronjob之前进行了扩展。您可能还拥有多个服务器,允许您进行更大的扩展。同步是作为“队列”的一部分来处理的。
您可以使用芹菜作为cron的替代品,但这并不是它的主要用途。它用于在分布式集群中扩展异步任务。
当然,芹菜有一个cron没有的big list of features。
https://stackoverflow.com/questions/16232572
复制相似问题