Многопроцессорность 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)

One Solution collect form web for “Многопроцессорность Python выходит элегантно Как?”

Причина, по которой вы не видите этого, заключается в том, что вы не общаетесь с подпроцессом. Вы пытаетесь использовать локальную переменную (локальную для родительского процесса), чтобы сигнализировать ребенку, что он должен быть выключен.

Взгляните на информацию о примитивах синхронности . Вам нужно настроить какой-то сигнал, на который можно ссылаться в обоих процессах. После этого вы сможете щелкнуть переключатель в родительском процессе и дождаться, пока ребенок умрет.

Попробуйте следующий код:

 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() 
Python - лучший язык программирования в мире.