python subprocess.Popen() 与消息队列(celery)

Kis*_*war 2 python django celery django-celery

我读到消息队列优于subprocess.Popen(). 据说消息队列是可扩展的解决方案。我想了解这是怎么回事。

我只是想列出消息队列的好处subeprocess.Popen(),以便我可以说服我的上级使用消息队列而不是subprocess

Ego*_*kov 5

这些是完全独立且不同的事情。

subprocess.Popen()只是为您传递给它的特定命令生成(通过调用fork和)新的操作系统进程。exec因此,当您需要在单独的进程中执行某些操作并(可选)获取执行结果(通过管道,以某种尴尬的方式)时,它非常适合。

队列(如 Celery 或 ActiveJob)为您提供了两个主要功能:

  • 用于您的任务(或消息)的存储(更准确地说,是某些现有存储的接口,例如 PostgreSQL 或 MongoDB),这些任务(或消息)将在进入该存储之前自动序列化。
  • 轮询此存储并实际执行这些任务的工作人员(在执行之前反序列化它们,也是自动的)。

因此,即使在分布式环境中,也可能有很多工作人员。它不仅为您提供垂直可扩展性,而且还为您提供水平可扩展性(通过将您的工作人员保持在不同的机器上)。

另一方面,队列更适合异步处理(即需要稍后执行且现在不需要结果的作业)并且比简单的进程生成更重量级。

因此,如果您有简单的一次性作业只是要在主流程之外的某个地方执行 - 请使用流程。

如果您有一堆需要异步执行的不同作业,并且您希望能够扩展该流程,那么您应该使用队列,它们会让生活变得更轻松。