Таймер потоков создает новый поток каждый раз? - PullRequest
0 голосов
/ 23 мая 2019

Я недавно получил этот код от этого человека здесь

Для справки:

from threading import Timer

class RepeatedTimer(object):
    def __init__(self, interval, function, *args, **kwargs):
        self._timer = None
        self.interval = interval
        self.function = function
        self.args = args
        self.kwargs = kwargs
        self.is_running = False
        self.start()

    def _run(self):
        self.is_running = False
        self.start()
        self.function(*self.args, **self.kwargs)

    def start(self):
        if not self.is_running:
            self._timer = Timer(self.interval, self._run)
            self._timer.start()
            self.is_running = True

    def stop(self):
        self._timer.cancel()
        self.is_running = False

Мой вопрос по поводу этого кода: создает ли он новый поток при каждом запуске? И если это так, может ли это повлиять на мой код в любом случае (например, ошибка или остановка?)

Спасибо, Ира.

1 Ответ

0 голосов
/ 23 мая 2019

Таймер создает поток при каждом запуске.Из документов :

Этот класс представляет действие, которое должно быть запущено только по истечении определенного периода времени - таймер.Таймер является подклассом Thread и, как таковой, также служит примером создания пользовательских потоков.

Таймеры запускаются, как и потоки, путем вызова их метода start ().Таймер можно остановить (до того, как его действие началось), вызвав метод cancel ().

Но работает только один «экземпляр», потому что он ждет завершения вашей функции, прежде чем снова вызвать себя.Так что, если вы не запустите несколько RepeatedTimers ...

Относительно того, может ли это повлиять на ваш код?Помимо того, что вам нужно убедиться, что ваш код безопасен для потоков и т. Д., Обратите внимание на то, что «таймер может быть остановлен ( до того, как его действие начнется )», поэтому вызов stop () или отмена не прервется на полпути через вашфункция.

...