Python 子进程在它自己的线程中
我想知道下面的课程是否合理。我正在使用它为我的测试环境中的每个测试启动一系列模拟器 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() 我对任何改进都感兴趣。我应该考虑使用关键字吗?如果是这样,会有什么好处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
谢谢 我看不出在这里让一个单独的线程卡在
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()
(未经测试)
我已经添加了上下文管理器的方法,但我看不出这会对您有什么帮助,因为这将需要创建大量带有语句的,包括必要的缩进
但也许我误解了你的意图…谢谢你的帮助!不,我也觉得对我没有帮助,但我还在学习,所以我不确定。。。