0

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

除了通过执行一些需要有效密钥的操作来检查状态之外,我没有其他方法可以检查我的密钥是否仍然有效。

我正在寻找一些解决方案,我可以用它来灵活地为我的密钥设置过期时间(作为参数传递)。

4

1 回答 1

1

概述:

  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 秒。

于 2013-03-25T16:42:45.130 回答