X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=p2pool%2Futil%2Fexpiring_dict.py;h=8a3c9eede5635a68b1c565ce4b190063ed1707d9;hb=0a3493d6873cfef4fb189d39e64dfbc6e162e2a7;hp=edae4b3c25a26d2484411d7704dab5e79e962e6a;hpb=3ac0391d000dfac67bb819698beb2ac86daf77fa;p=p2pool.git diff --git a/p2pool/util/expiring_dict.py b/p2pool/util/expiring_dict.py index edae4b3..8a3c9ee 100644 --- a/p2pool/util/expiring_dict.py +++ b/p2pool/util/expiring_dict.py @@ -1,8 +1,9 @@ from __future__ import division import time +import weakref -from twisted.internet import task +from p2pool.util import deferral class Node(object): def __init__(self, contents, prev=None, next=None): @@ -103,8 +104,10 @@ class ExpiringDict(object): self.expiry_deque = LinkedList() self.d = dict() # key -> node, value - self._expire_loop = task.LoopingCall(self.expire) - self._expire_loop.start(1) # XXX use inlinecallbacks and stop expiring at some point + + self_ref = weakref.ref(self, lambda _: expire_loop.stop() if expire_loop.running else None) + self._expire_loop = expire_loop = deferral.RobustLoopingCall(lambda: self_ref().expire()) + expire_loop.start(1) def stop(self): self._expire_loop.stop() @@ -175,23 +178,3 @@ class ExpiringDict(object): def itervalues(self): for node, value in self.d.itervalues(): yield value - -if __name__ == '__main__': - x = ExpiringDict(5) - print x - - time.sleep(1) - - x[1] = 2 - print 'x[1] = 2' - print x - - time.sleep(1) - - x[1] = 3 - print 'x[1] = 3' - print x - - time.sleep(5) - - print x