キー(セッションキーなど)を2時間ごとにリセットする必要がありますが、その後期限切れになります。コードに再アクティブ化機能を実装するための最良の方法はどれですか?
有効なキーを必要とするいくつかのアクションを実行してステータスを確認する以外に、キーがまだ有効かどうかを確認する方法はありません。
キーの柔軟な有効期限(パラメーターとして渡される)に使用できるソリューションを探しています。
キー(セッションキーなど)を2時間ごとにリセットする必要がありますが、その後期限切れになります。コードに再アクティブ化機能を実装するための最良の方法はどれですか?
有効なキーを必要とするいくつかのアクションを実行してステータスを確認する以外に、キーがまだ有効かどうかを確認する方法はありません。
キーの柔軟な有効期限(パラメーターとして渡される)に使用できるソリューションを探しています。
概要:
簡単な例を次に示します。
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秒です。