Django celery和Django cron-jobs用法之间的区别?

国标

我很抱歉,如果它的基础知识,但在Internet上比较这两种技术没有找到任何答案。我应该如何决定何时使用哪个可以同时用于计划和处理定期任务。

这就是文章所说的:

Django的芹菜:

作业是任何在后台为您做一些处理的应用程序的重要组成部分。如果您的工作是实时的,则可以使用Django应用程序celery。

Django-cronjobs:

django-cronjobs可用于安排为有效作业的periodic_task。django-cronjobs是一个简单的Django应用,可通过管理命令运行注册的cron作业。

谁能解释我何时选择哪个与为什么之间的区别?我还需要知道为什么在分发计算时使用芹菜,为什么不进行cron作业

比尔·洪内克

这两件事可以用于同一目标(后台执行)。但是,如果您要明智地选择,您应该真正理解它们实际上是完全不同的东西

这就是我希望有人在我还是新手时告诉我的内容(而不是我今天达到的新手水平:)。

克朗

cron作业的概念是我们希望命令/进程按计划执行。此外,我们希望该进程接收x,y,z参数,并使用a,b,c环境变量运行,并以用户ID 123运行。

某些cron系统可能会提供一些额外的功能,例如:

  • 赶上错过的任务(例如,服务器因一整夜断电而关闭,并且一旦我们将其打开,它将运行我们通常每小时运行一次的8个命令实例)。
  • 可能会帮助您解决通常使用pid文件执行的锁定类型,以避免并行运行同一命令。

在大多数情况下,cron系统应该是愚蠢的:“这时只需运行此命令,谢谢!”。

芹菜

芹菜的概念要复杂得多。它适用于任务,任务链和和弦,错误处理以及(在大多数情况下)工作结果的收集。它有一个(或多个)工作队列和一个(或多个)工人。当一个任务(实际上只是一条描述请求的工作的消息)进入队列时,它将在那里等待,直到有工作人员可以处理它为止。与DMV的一名或多名员工提供服务的方式几乎相同,是一个充满等待客户的房间。

此外,芹菜可以促进分布式工作。这有点像(如果我可能会折磨一下这个类比)-每个工人共享同一电话,计算机,复印机等的DMV办公室与工人拥有专用资源且从不被其他工人阻止的DMV之间的区别。

Web应用程序芹菜

在Web应用程序中,当少量的Web访问导致需要完成的事情应在与Web浏览器进行的对话范围之外进行处理时,经常使用Celery。例如:

  • 网络用户只是做了一些事情,应该导致发送了一封电子邮件。为了发送电子邮件,您的Web服务器将需要与邮件服务器联系。这可能会花费一些时间,服务器可能会很忙,等等-我们不能让网络用户只是等待,而在这样做时浏览器上什么也看不到。可以,但是它不能可靠地工作。因此,我们将电子邮件发送作为队列中的一部分工作。这样,它可以在“任何时候”发生,并且Web服务器可以恢复与浏览器的通信。

  • 用户刚刚提交了信用卡付款。您将需要与卡处理器联系,但这可能需要几秒钟。您甚至可能需要多次联系他们(例如,他们现在在那里真的很忙)。同样,您不希望用户的Web浏览器呆呆,也不想将Web服务器进程或执行线程捆绑在一起。取而代之的是,您使用Celery创建作业,告诉浏览器几秒钟后再检查一次(或使用“ Web套接字”),然后Web服务器继续运行并与其他Web用户对话。当浏览器稍后再​​检查时,您将查找任务ID,并从celery中查找任务是否完成以及结果如何(卡被拒绝等)。

使用芹菜作为cron

当您将Celery用作“ cron系统”时,您真正要做的就是说:“嘿,有人可以按Y计划生成X类型的工作”。将创建一个连续运行的流程,该流程大部分时间处于休眠状态,偶尔会醒来,以按您要求的时间表将一些工作注入队列中。

通常,您要求为您执行的“嘿某人”是:celery beatbeat从数据库中的某个位置或从设置文件中获取所需的日程表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章