[英]Python Multiprocessing Exit Elegantly How?
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)
您没有看到这种情况的原因是因为您没有与子进程通信。 您正在尝试使用本地变量(父进程的本地变量)向子进程发信号通知它应该关闭。
看看有关同步化的信息。 您需要设置某种可在两个进程中引用的信号。 一旦你有了这个,你应该能够在父进程中轻拂开关并等待孩子死亡。
请尝试以下代码:
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.