Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python subprocess.Popen()与消息队列(芹菜)_Python_Django_Celery_Django Celery - Fatal编程技术网

python subprocess.Popen()与消息队列(芹菜)

python subprocess.Popen()与消息队列(芹菜),python,django,celery,django-celery,Python,Django,Celery,Django Celery,我了解到消息队列优于subprocess.Popen()。据说消息队列是一种可扩展的解决方案。我想知道这是怎么回事 我只想列出消息队列优于subeprocess.Popen()的优点,这样我就可以说服我的上级使用消息队列而不是subprocess这些是完全不同的事情 subprocess.Popen()只是(通过调用fork和exec)为传递给它的特定命令生成新的操作系统进程。所以,当您需要在单独的流程中执行某些内容并(可选地)获得执行结果(通过管道以某种不太方便的方式)时,它非常适合 队列(如

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


我只想列出消息队列优于
subeprocess.Popen()
的优点,这样我就可以说服我的上级使用消息队列而不是
subprocess
这些是完全不同的事情

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

队列(如芹菜或ActiveJob)提供了两个主要功能:

  • 用于任务(或消息)的存储(更准确地说,是一些现有存储的接口,如PostgreSQL或MongoDB),这些任务(或消息)将在进入该存储之前自动序列化
  • 轮询此存储并实际执行这些任务的工作人员(在执行之前对其进行反序列化,也会自动执行)
所以,有很多工人是可能的,甚至在分布式环境中也是如此。它不仅为您提供了垂直的可伸缩性,还提供了水平的可伸缩性(通过将您的工作人员保持在不同的机器上)

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

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


如果需要异步执行一系列不同的作业,并且希望能够扩展该过程,则应使用队列,这样会使工作更轻松。

这些是完全不同的事情

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

队列(如芹菜或ActiveJob)提供了两个主要功能:

  • 用于任务(或消息)的存储(更准确地说,是一些现有存储的接口,如PostgreSQL或MongoDB),这些任务(或消息)将在进入该存储之前自动序列化
  • 轮询此存储并实际执行这些任务的工作人员(在执行之前对其进行反序列化,也会自动执行)
所以,有很多工人是可能的,甚至在分布式环境中也是如此。它不仅为您提供了垂直的可伸缩性,还提供了水平的可伸缩性(通过将您的工作人员保持在不同的机器上)

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

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


如果需要异步执行一系列不同的作业,并且希望能够扩展该过程,则应使用队列,这样会使工作更轻松。

除此之外的任何内容?您所说的重量级队列是什么意思?除此之外的任何内容?您所说的重量级队列是什么意思?