Метод start
клонировал объект в отдельный процесс, где он выполняет run
. Метод end
не является чем-то особенным, поэтому он выполняется в вызывающем его процессе - изменения, которые он выполняет для этого объекта, не отправляются объекту-клону.
Итак, используйте вместо этого подходящие средства межпроцессного взаимодействия, такие как multiprocessing.Evet instance, например ::
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()
Как видите, необходимые изменения минимальны.