Python多进程无法控制多个长时间运行的控制台exe?
我刚开始学Python,最近我想用Python脚本去调用一个控制台的exe程序,这个程序需要很长时间才能完成。我希望这个exe程序能尽可能多地被调用,直到CPU的负载达到极限。而且当这个exe完成工作后,它应该把CPU释放给其他新的任务。所以我觉得我可能需要一个多进程控制的机制。
因为多进程只能调用Python的可调用函数,不能直接调用控制台的exe程序。我把subprocess.Popen(cmd)封装在一个Python函数里。但是,问题是当我使用multiprocessing.Process.start()之前,这个exe程序就已经开始运行了。而且在它完成之前(需要很长时间),它不会把控制权还给我,导致程序卡住在那儿。这不是我想要的结果。
我把代码贴在下面:
import sys
import os
import multiprocessing
import subprocess
def subprocessExe(cmd):
return subprocess.call(cmd, shell=False, stdout=subprocess.PIPE, \
stderr=subprocess.PIPE,creationflags=0x08000000)
if __name__ == '__main__':
p = multiprocessing.Process(target=self.subprocessExe(exeFileName))
p.start()
print p, p.is_alive()
谢谢你的时间!
2 个回答
1
你的测试案例中有很多问题。以下这些对我来说是有效的:
import multiprocessing, subprocess
def subprocessExe(cmd):
subprocess.call([cmd], shell=False)
p = multiprocessing.Process(target=subprocessExe, args=('/full/path/to/script.sh',))
p.start()
或者
subprocess.call([cmd], shell=True)
p = multiprocessing.Process(target=subprocessExe, args=('script.sh',))
或者
subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE, \
stderr=subprocess.PIPE)
2
你在创建 multiprocessing.Process
对象的时候调用了 subprocessExec
。其实你应该这样做:
p = multiprocessing.Process(target=subprocessExec, args=(exeFileName,))
这样做之后就应该能正常工作了。