python multiprocessing无法控制多个长时间运行的控制台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()
感谢您的时间!     

解决方法

创建
multiprocessing.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()
要么
subprocess.call([cmd],shell=True)
p = multiprocessing.Process(target=subprocessExe,args=(\'script.sh\',))
要么
subprocess.Popen([cmd],shell=True,stdout=subprocess.PIPE,\\
                               stderr=subprocess.PIPE)