在python中重置几分钟后过期的密钥的最佳方法

2024-04-18 04:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须每两个小时重置一次我的密钥(类似于会话密钥),这之后就会过期。在我的代码中实现重新激活功能的最佳方法是什么?你知道吗

除了通过执行某些需要有效密钥的操作来检查状态外,没有其他方法可用于检查密钥是否仍然有效。你知道吗

我正在寻找一些解决方案,我可以使用它为我的密钥提供灵活的过期时间(作为参数传递)。你知道吗


Tags: 方法代码功能状态时间密钥解决方案重置
1条回答
网友
1楼 · 发布于 2024-04-18 04:30:41

概述:

  1. 创建一个对象类来表示每个键
  2. 作为该对象的每个实例的一个元素,它是定时生命
  3. 在适当的时间回调实例
  4. 对象决定在超时时死亡或重新启动

下面是一个小例子:

import threading, time, random

class Key(object):
    results={}
    def __init__(self,refresh,name):
        self.refresh=refresh
        self.name=name
        self.t0=time.time()
        self.t=threading.Timer(refresh,self.now_what)
        self.t.start()

    def now_what(self):
        s='{}: {:6.4f}'.format(self.name,time.time()-self.t0)
        Key.results.setdefault(self.refresh,[]).append(s)
        # do the thing you want at this time ref with the Key...

    def time_left(self):
        return max(self.t0+self.refresh-time.time(),0)

keys=[Key(random.randint(2,15),'Key {}'.format(i)) for i in range(1,1001)]
t=time.time()
while any(key.time_left() for key in keys):
    if time.time()-t > 1:
        kc=filter(lambda x: x, (key.time_left() for key in keys))
        if kc:
            tmpl='{} keys; max life: {:.2f}; average life: {:.2f}'
            print tmpl.format(len(kc),max(kc),sum(kc)/len(kc))
            t=time.time()

for k in sorted(Key.results):
    print '\nKeys with {} secs life:'.format(k)
    for e in Key.results[k]:
        print '\t{}'.format(e)

印刷品:

1000 keys; max life: 13.98; average life: 7.38
933 keys; max life: 12.98; average life: 6.85
870 keys; max life: 11.97; average life: 6.29
796 keys; max life: 10.97; average life: 5.80
729 keys; max life: 9.97; average life: 5.26
666 keys; max life: 8.96; average life: 4.68
594 keys; max life: 7.96; average life: 4.16
504 keys; max life: 6.96; average life: 3.77
427 keys; max life: 5.96; average life: 3.32
367 keys; max life: 4.95; average life: 2.74
304 keys; max life: 3.95; average life: 2.16
215 keys; max life: 2.95; average life: 1.76
138 keys; max life: 1.95; average life: 1.32
84 keys; max life: 0.95; average life: 0.72

Keys with 2 secs life:
    Key 26: 2.0052
    Key 27: 2.0053
    Key 41: 2.0048
    ...
Keys with 3 secs life:
    Key 4: 3.0040
    Key 31: 3.0065
    Key 32: 3.0111
    ...
Keys with 4 secs life:
...

您可以看到,精度有一些变化,但大多数情况下是1/100秒。你知道吗

相关问题 更多 >