Обратите внимание на модуль sched в стандартной библиотеке Python - по сути, он не поддерживает напрямую периодические таймеры, только одноразовые «события», но является стандартным приемом для включения одноразовых применяется событие в периодическом таймере (вызываемое событие, обрабатывающее одноразовое событие, просто перепланирует себя для следующего повторения, прежде чем перейти к выполнению реальной работы).
Может быть полезно определить класс «запланированного периодического таймера» для инкапсуляции ключевых идей:
class spt(object):
def __init__(self, scheduler, period):
self._sched = scheduler
self._period = period
self._event = None
def start(self):
self._event = self._sched.enter(0, 0, self._action, ())
def _action(self):
self._event - self._sched.enter(self._period, 0, self._action, ())
self.act()
def act(self):
print "hi there"
def cancel(self):
self._sched.cancel(self._event)
Чтобы связать значимое действие с запланированным периодическим таймером, создайте подкласс spt и переопределите метод act
(шаблон разработки метода шаблона). Конечно, вы можете выбрать более гибкие архитектуры, например, если __init__
принимать вызываемые и аргументы, а также планировщик (экземпляр self.scheduler
) и точку (как число с плавающей запятой в секундах, если вы создаете планировщик в стандартный способ с time.time и time.sleep); При желании вы также можете установить приоритет (возможно, со значением default , равным 0), а не использовать постоянный приоритет 0, который я использовал выше.