X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=p2pool%2Futil%2Fexpiring_dict.py;h=8a3c9eede5635a68b1c565ce4b190063ed1707d9;hb=0a3493d6873cfef4fb189d39e64dfbc6e162e2a7;hp=88085f366407b208903b3d1635e6fa6f847f73cd;hpb=65c3be6ddd4b1df319554c93222789a1b197e90e;p=p2pool.git diff --git a/p2pool/util/expiring_dict.py b/p2pool/util/expiring_dict.py index 88085f3..8a3c9ee 100644 --- a/p2pool/util/expiring_dict.py +++ b/p2pool/util/expiring_dict.py @@ -1,9 +1,9 @@ from __future__ import division -import random 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): @@ -104,7 +104,13 @@ class ExpiringDict(object): self.expiry_deque = LinkedList() self.d = dict() # key -> node, value - task.LoopingCall(self.expire).start(1) # XXX + + 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() def __repr__(self): return 'ExpiringDict' + repr(self.__dict__) @@ -172,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