我必须每两个小时重置一次我的密钥(类似于会话密钥),之后就会过期。在我的代码中实现重新激活功能的最佳方法是什么?
除了通过执行一些需要有效密钥的操作来检查状态之外,我没有其他方法可以检查我的密钥是否仍然有效。
我正在寻找一些解决方案,我可以用它来灵活地为我的密钥设置过期时间(作为参数传递)。
我必须每两个小时重置一次我的密钥(类似于会话密钥),之后就会过期。在我的代码中实现重新激活功能的最佳方法是什么?
除了通过执行一些需要有效密钥的操作来检查状态之外,我没有其他方法可以检查我的密钥是否仍然有效。
我正在寻找一些解决方案,我可以用它来灵活地为我的密钥设置过期时间(作为参数传递)。
概述:
这是一个简单的例子:
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 秒。