0

キー(セッションキーなど)を2時間ごとにリセットする必要がありますが、その後期限切れになります。コードに再アクティブ化機能を実装するための最良の方法はどれですか?

有効なキーを必要とするいくつかのアクションを実行してステータスを確認する以外に、キーがまだ有効かどうかを確認する方法はありません。

キーの柔軟な有効期限(パラメーターとして渡される)に使用できるソリューションを探しています。

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 に答える