Я работаю над проектом, конструкция которого похожа на приведенную ниже.Я надеюсь иметь объект, который открывает поток при создании и автоматически закрывает его, когда объект уничтожается.Это работает, как и ожидалось, когда объект создается внутри функции, но когда объект создается в глобальной области, __del__
не вызывается, что приводит к зависанию программы.
import threading
def thread(event):
event.wait()
print("Terminating thread")
class ThreadManager:
def __init__(self):
self.event = threading.Event()
self.thread = threading.Thread(target=thread, args=(self.event,))
self.thread.start()
def __del__(self):
self.event.set()
print("Event set")
self.thread.join()
if __name__ == '__main__':
print("Creating thread")
manager = ThreadManager()
#del manager
Если я явно неудалить объект manager
, программа зависает.Я предполагаю, что интерпретатор ожидает удаления глобальных объектов до тех пор, пока не будут завершены все потоки, не являющиеся демонами, что вызовет ситуацию взаимоблокировки.
У меня вопрос, может ли кто-нибудь подтвердить это и предложить обходной путь (я прочитал на этой странице, поэтому я не ищу решения с использованием функции close()
или чего-то подобного, мне просто любопытно услышать идеи альтернативы, которая бы выполняла автоматическую очистку), или же опровергнуть ееи скажи мне, что я делаю не так?