python multiprocessing.Process 的 start() 和 subprocess.Popen 是做同样的工作吗

1 投票
1 回答
3409 浏览
提问于 2025-04-16 18:19

我刚开始学习Python。最近我尝试用Python脚本去调用一个控制台的exe程序,这个程序需要很长时间才能完成。我希望这个exe程序可以尽可能多地被调用,只要CPU能承受得住。当exe程序完成工作后,CPU就可以用来处理其他新任务。所以我觉得我可能需要一个多进程控制的机制。

在我切换到multiprocessing.Process之前,我可以通过subprocess.Popen来调用我的exe,这样运行得很好。但是,切换到multiprocessing.Process后,似乎start()无法调用我的exe(我能从CPU的表现中看出不同)。有没有人能给我一点提示?顺便说一下,我使用的是以下代码。

之前使用subprocess:

cmd = exeFileName + r" " + inputArguments

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

现在使用multiprocessing:

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

b.start()

正如你可能注意到的,我的exe程序需要输入参数才能工作。所以在subprocess的代码中,我使用了一串命令来捕获整行。而在multiprocessing的代码中,我没有这样做,因为它已经内置了目标和参数。

谢谢你的时间!

1 个回答

5

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

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

这两者是不能互换的。

撰写回答