python多处理无法控制多个长时间运行的控制台exe?
我是Python的新手。我最近尝试使用Python脚本调用控制台exe,这是一个需要很长时间的过程。我将允许在CPU允许的范围内多次调用exe。当exe完成它的工作时。它应该将CPU释放到其他新作业中。所以我想我可能需要多过程控制机制 因为多处理只能调用python可调用函数。它不能直接调用控制台exe。我将subprocess.Popen(cmd)包装在一个python函数中。然而,在我这么做之后,我发现在使用multiprocessing.Process.start()之前。exe已启动。问题是在它完成它正在做的事情之前(需要很长时间),它并没有将控制权返回给我。程序被冻结以等待。那不是我想要的 我发布的代码如下:python多处理无法控制多个长时间运行的控制台exe?,python,console,subprocess,multiprocessing,exe,Python,Console,Subprocess,Multiprocessing,Exe,我是Python的新手。我最近尝试使用Python脚本调用控制台exe,这是一个需要很长时间的过程。我将允许在CPU允许的范围内多次调用exe。当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()
谢谢你抽出时间 当您创建
多处理.Process
对象时,您正在调用subprocessExec
。您应该这样做:
p = multiprocessing.Process(target=subprocessExec, args=(exeFileName,))
然后它应该会工作。在您的测试用例中有很多错误。以下是我的工作:
import multiprocessing, subprocess
def subprocessExe(cmd):
subprocess.call([cmd], shell=False)
p = multiprocessing.Process(target=subprocessExe, args=('/full/path/to/script.sh',))
p.start()
或
或
我试过这个。它不起作用。Python自己的forking.py模块中出现错误。我使用的正是您在那里编写的。但是我的文件名有一个空格。因为它后面有论点。所以我的“cmd”类似于“*.exe xyz”。它与subprocess.Popen没有问题。但是如果我把整个字符串“cmd”放在multiprocessing.processing的arg中。它报告“picklingerror”错误,在cmd字符串中没有空格的情况下重试。只有一个exe文件。它仍然报告那个错误。我使用的是python 2.6。您可能还希望在p.start()之前添加
p.daemon=True
subprocess.call([cmd], shell=True)
p = multiprocessing.Process(target=subprocessExe, args=('script.sh',))
subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE, \
stderr=subprocess.PIPE)