Сбрасываемый таймер объекта реализации Python - PullRequest
0 голосов
/ 16 мая 2019

Мне нужен таймер в Python, который я могу сбросить (timer.reset ()).У меня уже есть периодический таймер.Есть ли библиотека с таким таймером?

class MyTimer(threading.Timer):
    def __init__(self, t):
        threading.Thread.__init__(self)
        self.__event = threading.Event()
        self.__stop_event = threading.Event()
        self.__intervall = t

    def run(self):
        while not self.__stop_event.wait(self.__intervall):
            self.__event.set()

    def clear(self):
        self.__event.clear()

    def is_present(self):
        return self.__event.is_set()

    def cancel(self):
        self.__stop_event.set()

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Вот пример, который реализует метод reset для «расширения» таймера на исходный интервал.Он использует внутренний Timer объект, а не подклассы threading.Timer.

from threading import Timer
import time


class ResettableTimer(object):
    def __init__(self, interval, function):
        self.interval = interval
        self.function = function
        self.timer = Timer(self.interval, self.function)

    def run(self):
        self.timer.start()

    def reset(self):
        self.timer.cancel()
        self.timer = Timer(self.interval, self.function)
        self.timer.start()


if __name__ == '__main__':
    t = time.time()
    tim = ResettableTimer(5, lambda: print("Time's Up! Took ", time.time() - t, "seconds"))
    time.sleep(3)
    tim.reset()

Вывод:

Time's Up! Took 8.011203289031982 seconds

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

Вот простой пример.Вы должны рассмотреть возможность добавления блокировок.

import threading
import time

def hi( ):
    print('hi')
    mine.start()



class ReusableTime():
    def __init__(self, t, func):
        self._t = t
        self._func = func

    def start(self):
        self._thread = threading.Timer(self._t, self.handler)
        self._thread.start()

    def handler(self):
        self._func()


mine = ReusableTime(2, hi)
mine.start()
time.sleep(100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...