Python 子进程在它自己的线程中

Python 子进程在它自己的线程中,python,multithreading,python-3.x,Python,Multithreading,Python 3.x,我想知道下面的课程是否合理。我正在使用它为我的测试环境中的每个测试启动一系列模拟器 class SubProcessInOwnThread(threading.Thread): def __init__(self, arguments, currentWorkingDirectory): self.arguments = arguments self.currentWorkingDirectory = currentWorkingD

我想知道下面的课程是否合理。我正在使用它为我的测试环境中的每个测试启动一系列模拟器

class SubProcessInOwnThread(threading.Thread): def __init__(self, arguments, currentWorkingDirectory): self.arguments = arguments self.currentWorkingDirectory = currentWorkingDirectory threading.Thread.__init__(self) self.isTerminated = False def run(self): try: self.subProcess = subprocess.Popen(self.arguments, cwd=self.currentWorkingDirectory) self.subProcess.wait() finally: self.isTerminated = True def kill(self): while not self.isTerminated: try: self.subProcess.kill() except: time.sleep(0.1) 类子进程wnthread(threading.Thread): def u uu init uuuuu(self,arguments,currentWorkingDirectory): self.arguments=参数 self.currentWorkingDirectory=currentWorkingDirectory threading.Thread.\uuuuu init\uuuuuu(自) self.isTerminated=False def运行(自): 尝试: self.subProcess=subProcess.Popen(self.arguments,cwd=self.currentWorkingDirectory) self.subProcess.wait() 最后: self.isTerminated=True def杀死(自我): 虽然不是自我毁灭的: 尝试: self.subProcess.kill() 除: 睡眠时间(0.1) 一些议员:

# Normal subProcessThreadArguments = ["cmd.exe"] subProcessThread = SubProcessInOwnThread(subProcessThreadArguments,r"C:\\") subProcessThread.start() time.sleep(5) subProcessThread.kill() # Process killed very quickly subProcessThreadArguments = ["cmd.exe"] subProcessThread = SubProcessInOwnThread(subProcessThreadArguments,r"C:\\") subProcessThread.start() subProcessThread.kill() # Incorrect configuration subProcessThreadArguments = ["cmdsfgfg.exe"] subProcessThread = SubProcessInOwnThread(subProcessThreadArguments,r"C:\\") subProcessThread.start() time.sleep(5) subProcessThread.kill() #正常的 subProcessThreadArguments=[“cmd.exe”] subProcessThread=SubProcessInOwnThread(subProcessThreadArguments,r“C:\\”) subProcessThread.start() 时间。睡眠(5) subProcessThread.kill() #这个过程很快就结束了 subProcessThreadArguments=[“cmd.exe”] subProcessThread=SubProcessInOwnThread(subProcessThreadArguments,r“C:\\”) subProcessThread.start() subProcessThread.kill() #配置不正确 subProcessThreadArguments=[“cmdsfgfg.exe”] subProcessThread=SubProcessInOwnThread(subProcessThreadArguments,r“C:\\”) subProcessThread.start() 时间。睡眠(5) subProcessThread.kill() 所以我可以创建这样的模拟器:

subProcessThreadArguments1 = ["sim1.exe"] subProcessThread1 = SubProcessInOwnThread(subProcessThreadArguments1,r"C:\\") subProcessThread1.start() subProcessThreadArguments2 = ["sim2.exe"] subProcessThread2 = SubProcessInOwnThread(subProcessThreadArguments2,r"C:\\") subProcessThread2.start() # do test... subProcessThread1.kill() subProcessThread2.kill() 子流程ThreadArguments1=[“sim1.exe”] subProcessThread1=SubProcessInOwnThread(subProcessThreadArguments1,r“C:\\”) 子流程thread1.start() 子流程ThreadArguments2=[“sim2.exe”] subProcessThread2=SubProcessInOwnThread(subProcessThreadArguments2,r“C:\\”) 子流程thread2.start() #做测试。。。 子流程thread1.kill() 子流程thread2.kill() 我对任何改进都感兴趣。我应该考虑使用关键字吗?如果是这样,会有什么好处


谢谢

我看不出在这里让一个单独的线程卡在
wait()
中有什么意义。直接在子流程上工作就像

class SubProcessWithoutThread(object):
    def __init__(self, arguments, currentWorkingDirectory):
        self.arguments = arguments
        self.currentWorkingDirectory = currentWorkingDirectory
        self.isTerminated = False

    def start(self):
        self.subProcess = subprocess.Popen(self.arguments, cwd=self.currentWorkingDirectory)

    def kill(self):
        while self.subProcess.poll() is None:
            try:
                self.subProcess.kill()
            except:
                time.sleep(0.1)

    __enter__ = start
    def __exit__(self, *x):
        self.kill()
(未经测试)

我已经添加了上下文管理器的方法,但我看不出这会对您有什么帮助,因为这将需要创建大量带有语句的
,包括必要的缩进


但也许我误解了你的意图…

谢谢你的帮助!不,我也觉得对我没有帮助,但我还在学习,所以我不确定。。。