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

时间:2013-03-25 16:34:05

标签: python

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

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

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

1 个答案:

答案 0 :(得分:1)

概述:

  1. 创建一个对象类来表示每个键;
  2. 作为该对象的每个实例的元素,它是定时生活;
  3. 有回调以在适当的时间调用实例;
  4. 该对象决定在超时时死亡或重新启动
  5. 这是一个简单的例子:

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