我读到该消息队列比subprocess.Popen()
更受欢迎。据说消息队列是可扩展的解决方案。我想知道它是怎么回事。
我只想列出消息队列优于subeprocess.Popen()
的好处,以便我可以说服我的上司使用消息队列而不是subprocess
答案 0 :(得分:4)
这些是完全不同的东西。
subprocess.Popen()
只是为您传递给它的特定命令产生(通过调用fork
和exec
)新操作系统进程。因此,当您需要在单独的流程中执行某些操作并(可选)获取执行结果(通过管道以某种笨拙的方式)时,它非常适合。
队列(如Celery或ActiveJob)为您提供了两个主要内容:
因此,可能有很多工人,甚至可能在分布式环境中。它不仅为您提供垂直可扩展性,还为横向可扩展性(通过将您的工作人员保留在不同的计算机上)。
另一方面,队列更适合异步处理(即需要稍后执行的作业,而您现在不需要结果),并且比简单的流程生成更重要。
因此,如果您只是在主流程之外的某个地方执行简单的一次性工作 - 请使用流程。
如果你有一堆不同的工作需要异步执行,并且你希望能够扩展该过程,你应该使用队列,它们会让生活更轻松。