python multiprocessing.Process 的 start() 和 subprocess.Popen 是做同样的工作吗
我刚开始学习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的可调用对象(比如函数)。
这两者是不能互换的。