Python多重处理优雅退出如何?
import multiprocessing import time class testM(multiprocessing.Process): def __init__(self): multiprocessing.Process.__init__(self) self.exit = False def run(self): while not self.exit: pass print "You exited!" return def shutdown(self): self.exit = True print "SHUTDOWN initiated" def dostuff(self): print "haha", self.exit a = testM() a.start() time.sleep(3) a.shutdown() time.sleep(3) print a.is_alive() a.dostuff() exit()
我只是想知道如何来上面的代码不真正打印“你退出”。 我究竟做错了什么? 如果是的话,有人可以指出我正确的退出方式吗? (我不是指process.terminate或kill)
你没有看到这种情况发生的原因是你没有与subprocess通信。 您正试图使用本地variables(父进程的本地variables)向小孩发出应closures的信号。
看看同步优势的信息。 你需要设置一个可以在两个进程中引用的信号。 一旦你有了这个,你应该能够轻弹父进程中的开关,并等待孩子死亡。
试试下面的代码:
import multiprocessing import time class MyProcess(multiprocessing.Process): def __init__(self, ): multiprocessing.Process.__init__(self) self.exit = multiprocessing.Event() def run(self): while not self.exit.is_set(): pass print "You exited!" def shutdown(self): print "Shutdown initiated" self.exit.set() if __name__ == "__main__": process = MyProcess() process.start() print "Waiting for a while" time.sleep(3) process.shutdown() time.sleep(3) print "Child process state: %d" % process.is_alive()