По идее в ниже приведенном примере вывод должен быть -
Завершение Thread_002т.е. Base должен завершитья последним, но вместо этого он завершается первым, т.е. join() не дожидается завершения. Почему?
Завершение Thread_001
Завершение Base
# -*- coding: UTF-8 -*- from multiprocessing import Pipe from threading import Thread EXIT = 0 class Base(object): def __init__(self): pipe, self.pipe_001 = Pipe() self.Thread_001 = Thread_001(pipe) self.Thread_001.start() def run(self): self.pipe_001.send(EXIT) self.Thread_001.join() def __del__(self): print('Завершение Base') class Thread_001(Thread): def __init__(self, pipe): Thread.__init__(self) self.pipe = pipe pipe, self.pipe_002 = Pipe() self.Thread_002 = Thread_002(pipe) self.Thread_002.start() def run(self): command = None while command != EXIT: command = self.pipe.recv() self.pipe_002.send(EXIT) self.Thread_002.join() def __del__(self): print('Завершение Thread_001') class Thread_002(Thread): def __init__(self, pipe): Thread.__init__(self) self.pipe = pipe def run(self): command = None while command != EXIT: command = self.pipe.recv() def __del__(self): print('Завершение Thread_002') if __name__ == '__main__': Base().run()