我希望编写一个执行另一个进程的命令的进程。这包括接收命令,处理它并响应调用进程和结果。在请求执行下一个命令之前,调用进程应等待答复。这是我到目前为止:处理产生的进程中的异常
import multiprocessing
import time
class CommandProcessor(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
self.command = multiprocessing.Queue()
self.result = multiprocessing.Queue()
def run(self):
while True:
c = self.command.get()
if not c: break
self.result.put(str(c))
def execute(self, n):
self.command.put(n)
return self.result.get()
def stop(self):
self.command.put(None)
self.join()
try:
p = CommandProcessor()
p.start()
r = p.execute(1)
print("Result: "+r)
r = p.execute(2)
print("Result: "+r)
r = p.execute(3)
print("Result: "+r)
finally:
p.stop()
至少有一个问题,我的设计。例如,如果中存在异常,则主进程将无限期地等待return self.result.get()
行。我可以给get()
方法添加一个超时,但是我运行的一些命令需要相当长的时间来执行。所以超时时间必须足够长才能保证执行。我该如何处理这个问题,以便在出现异常时将两个进程终止,并将有用的堆栈跟踪转储到标准输出。
所以它包装在一个''尝试/ except''做*什么明智的*。 –