Python 子进程.Popen() vs 消息队列(芹菜)



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

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

这些是完全独立和不同的东西。

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

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

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

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

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

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

如果你有一堆不同的作业需要异步执行,并且你想要能够扩展该过程,你应该使用队列,它们会让生活更轻松。

相关内容

  • 没有找到相关文章

最新更新