【问题标题】:is python multiprocessing.Process start() doing the same job as subprocess.Popenpython multiprocessing.Process start() 是否与 subprocess.Popen 做同样的工作
【发布时间】:2011-09-01 23:35:10
【问题描述】:

我是 Python 的新手。我最近尝试使用 Python 脚本调用控制台 exe,这是一个需要很长时间的过程。我将允许在 CPU 允许的范围内多次调用 exe。当 exe 完成其工作时。 CPU 可以分配给其他新作业。所以我想我可能需要多进程控制机制。

在切换到 multiprocessing.Process 之前,我可以从 subprocess.Popen 调用我的 exe。它工作正常。但是,在我切换到 multiprocessing.Process 之后。似乎 start() 不能调用我的 exe (我可以从 CPU 性能上看出区别)。任何人都可以提供线索吗?仅供参考,我正在使用以下代码。

以前使用子进程:

cmd = exeFileName + r" " + inputArguments

a = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

现在使用多进程:

b = multiprocessing.Process(target=exeFileName,args=inputArguments)

b.start()

您可能已经注意到,我的 exe 需要输入参数才能工作。所以在子进程代码中,我使用一串cmd来捕获整行。在多处理代码中,我不是。它已经内置了一个目标和参数。 感谢您的宝贵时间!

【问题讨论】:

  • 终于搞定了。我最后放弃了多处理。相反,我使用 subprocess 和它自己的 poll() 方法来告诉我 exe 是否已终止。然后将它们附加到线程。它现在似乎工作了。

标签: python subprocess multiprocessing


【解决方案1】:

使用subprocess.Popen 在子进程中运行其他可执行文件。

使用multiprocessing.Process 在子进程中运行 Python 可调用对象(例如函数)。

两者不可互换。

【讨论】:

  • 我明白了。我必须将我的一行 subprocess.Popen 包装在一个 python 函数中,然后从多处理中调用它会起作用。
  • 但有一个问题,似乎在我使用 multiprocessing.Process start() 函数之前执行了 exe。我希望我们使用多处理机制来控制和为 exe 分配可用的 CPU。
  • @Mua:我不确定 multiprocessing.Process 会做你想做的事。特别是,使用 multiprocessing.Process 派生一个随后调用 subprocess.Popen 派生一个子进程的子进程并不能很好地管理资源——它可能只是使用更多的资源(2 个进程而不是 1 个)。如果您可以更详细地描述您希望如何管理流程,也许有人可以提出一种方法来做到这一点。在这一点上,我不确定多处理是正确的工具。
  • 谢谢你,unutbu。我为此提出了另一个问题。我想做的是使用多处理机制来控制几个长时间运行的exe。当他们完成工作时,释放 CPU。或者用户可以选择在进程中间中止 exe。对此仍然没有好主意。 :(
猜你喜欢
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
相关资源
最近更新 更多