Я использую пакет threading.Timer
для выполнения метода через x секунд. Однако в некоторых случаях я хочу выполнить этот метод раньше и отменить таймер (чтобы он не вызывался дважды). Как мне это проверить?
Я хочу знать, остановился ли таймер, чтобы метод больше не вызывался. Я сейчас использую следующий код, к сожалению, is_alive still
возвращает True
from threading import Timer
Class X():
def __init__(self, timeout):
self.timer = Timer(timeout, self.some_method)
self.timer.start()
def some_method(self):
# Do something
def other_method(self):
self.timer.cancel()
self.some_method()
import unittest
Class TestX(unittest.TestCase):
def test_cancel_timer(self):
x = X(1000)
x.other_method()
self.assertFalse(x.timer.is_alive())
Сформируйте документацию, метод is_alive
возвращает True во время операции run
;
Вернуть, жив ли поток.
Этот метод возвращает True непосредственно перед тем, как метод run () запускается до тех пор, пока метод run () не завершится. Функция модуля enumerate () возвращает список всех живых потоков.
Документация по методу cancel
гласит следующее:
Остановите таймер и отмените выполнение действия таймера. Это будет работать, только если таймер все еще находится на стадии ожидания.
Означает ли это, что метод cancel
не останавливает действие run
? Или все еще находится в серой области после метода run и возвращает True по этой причине?