Удалить экземпляр переназначенной переменной в Python - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь создать класс Timer, используя потоки, которые при переназначении экземпляра удаляют старый поток, поэтому оба потока не продолжают работать. Можно ли удалить старые экземпляры класса, когда на него больше нет ссылок?

Например,

class Timer(Thread):
    def __init__(self, callback, delay):
        Thread.__init__(self)
        self.stopped = Event()
        self.callback = callback
        self.delay = delay
        self.start()

    def run(self):
        while not self.stopped.wait(self.delay):
            self.callback()

    def stop(self):
        self.stopped.set()
        Thread.join(self)

x = Timer(func1, 0.5)
sleep(2)
x = Timer(func2, 0.5)
sleep(5)

Запуск этого кода приводит к вызову func1 и func2 во время последнего сна. Возможно ли при переназначении x закрыть первый поток, чтобы вызывался только func2. Я попытался создать метод класса, который возвращает слабую ссылку на новый экземпляр Timer, и с помощью g c .collect () попытаться удалить старый экземпляр, но я не могу заставить его работать.

Есть идеи?

...