在下面的脚本中,我收到“收到停止消息”输出但该过程永远不会结束。这是为什么?除了终止或os.kill之外还有另一种方法来结束这个过程吗?
from multiprocessing import Process
from time import sleep
class Test(Process):
def __init__(self):
Process.__init__(self)
self.stop = False
def run(self):
while self.stop == False:
print "running"
sleep(1.0)
def end(self):
print "stop message received"
self.stop = True
if __name__ == "__main__":
test = Test()
test.start()
sleep(1.0)
test.end()
test.join()
答案 0 :(得分:3)
start
方法将对象克隆到一个单独的进程中,执行run
。 end
方法没有什么特别之处,因此它在调用它的过程中运行 - 它对该对象执行的更改不会发送到克隆对象。
因此,请使用适当的进程间通信方式,例如multiprocessing.Evet实例,例如:
from multiprocessing import Process, Event
from time import sleep
class Test(Process):
def __init__(self):
Process.__init__(self)
self.stop = Event()
def run(self):
while not self.stop.is_set():
print "running"
sleep(1.0)
def end(self):
print "stop message received"
self.stop.set()
if __name__ == "__main__":
test = Test()
test.start()
sleep(1.0)
test.end()
test.join()
如您所见,所需的更改很少。