Вот пользовательский класс для переменной с тайм-аутом, без необходимости установки стороннего пакета:
import time
class TimeoutVar:
"""Variable whose values time out."""
def __init__(self, value, timeout):
"""Store the timeout and value."""
self._value = value
self._last_set = time.time()
self.timeout = timeout
@property
def value(self):
"""Get the value if the value hasn't timed out."""
if time.time() - self._last_set < self.timeout:
return self._value
@value.setter
def value(self, value, timeout=None):
"""Set the value while resetting the timer."""
self._value = value
self._last_set = time.time()
if timeout is not None:
self.timeout = timeout
Вы можете сохранить это в файле, скажем timeout_var.py
, затем импортировать класс в вашем коде. Это можно использовать следующим образом:
import time
from timeout_var import TimeoutVar
var = TimeoutVar(value=3, timeout=5)
print(var.value)
time.sleep(5)
print(var.value)
var.value = 7
print(var.value)
time.sleep(5)
print(var.value)
Выход:
3
None
7
None
Когда вы присваиваете атрибуту value
новое значение, внутренний таймер также сбрасывается.