Python中具有超时的变量



我需要在Python中声明一个带超时的变量!事实上,我需要像REDIS超时这样的东西,当我们试图在超时后读取密钥时,我们会得到null(None(。我知道变量可以被删除,在那之后,读取变量会引发错误,但对我来说,返回None就足够了。有没有现成的库/包可以满足这一要求,或者在没有样板代码的情况下帮助我做到这一点?

这里有一个自定义类,用于一个有超时的变量,而无需安装第三方包:

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属性指定一个新值时,内部计时器也会重置。

尝试ExpiringDict。它允许您定义一个带有密钥过期的字典。

首先,安装包:

pip install expiringdict

以下是一个基本用法示例:

import time
from expiringdict import ExpiringDict
vars_with_expiry = ExpiringDict(max_age_seconds=1, max_len=100)
vars_with_expiry["my_var"] = "hello"
print(vars_with_expiry.get("my_var")) # hello
time.sleep(2)
print(vars_with_expiry.get("my_var")) # None

vars_with_expiry是一个字典,其到期超时为1秒,最大长度为100个密钥(ExpiringDict在初始化过程中需要预定义的大小参数(。

在上面的示例中,您可以看到密钥my_var是如何被删除的,并且在sleep之后不可用。

相关内容

  • 没有找到相关文章

最新更新