From 3ac0391d000dfac67bb819698beb2ac86daf77fa Mon Sep 17 00:00:00 2001 From: Forrest Voight Date: Thu, 22 Dec 2011 23:10:38 -0500 Subject: [PATCH] don't enable serialization caching by default --- p2pool/bitcoin/data.py | 23 ++++++++++++++++++++--- p2pool/main.py | 2 ++ p2pool/util/expiring_dict.py | 6 +++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/p2pool/bitcoin/data.py b/p2pool/bitcoin/data.py index 1a071fe..2eff7d0 100644 --- a/p2pool/bitcoin/data.py +++ b/p2pool/bitcoin/data.py @@ -82,9 +82,26 @@ class Type(object): return data - _backing = expiring_dict.ExpiringDict(100) - pack2 = memoize.memoize_with_backing(_backing, [unpack])(pack2) - unpack = memoize.memoize_with_backing(_backing)(unpack) # doesn't have an inverse + _backing = None + + @classmethod + def enable_caching(cls): + assert cls._backing is None + cls._backing = expiring_dict.ExpiringDict(100) + cls._pre_pack2 = cls.pack2 + cls.pack2 = memoize.memoize_with_backing(cls._backing, [cls.unpack])(cls.pack2) + cls._pre_unpack = cls.unpack + cls.unpack = memoize.memoize_with_backing(cls._backing)(cls.unpack) # doesn't have an inverse + + @classmethod + def disable_caching(cls): + assert cls._backing is not None + cls._backing.stop() + cls._backing = None + cls.pack2 = cls._pre_pack2 + del cls._pre_pack2 + cls.unpack = cls._pre_unpack + del cls._pre_unpack def pack(self, obj): return self.pack2(slush.immutify(obj)) diff --git a/p2pool/main.py b/p2pool/main.py index 42693ac..bbc352d 100644 --- a/p2pool/main.py +++ b/p2pool/main.py @@ -62,6 +62,8 @@ def main(args, net, datadir_path): print "Install Pygame and PIL to enable visualizations! Visualizations disabled." print + bitcoin_data.Type.enable_caching() + # connect to bitcoind over JSON-RPC and do initial getmemorypool url = 'http://%s:%i/' % (args.bitcoind_address, args.bitcoind_rpc_port) print '''Testing bitcoind RPC connection to '%s' with username '%s'...''' % (url, args.bitcoind_rpc_username) diff --git a/p2pool/util/expiring_dict.py b/p2pool/util/expiring_dict.py index 153fc76..edae4b3 100644 --- a/p2pool/util/expiring_dict.py +++ b/p2pool/util/expiring_dict.py @@ -103,7 +103,11 @@ class ExpiringDict(object): self.expiry_deque = LinkedList() self.d = dict() # key -> node, value - task.LoopingCall(self.expire).start(1) # XXX use inlinecallbacks and stop expiring at some point + self._expire_loop = task.LoopingCall(self.expire) + self._expire_loop.start(1) # XXX use inlinecallbacks and stop expiring at some point + + def stop(self): + self._expire_loop.stop() def __repr__(self): return 'ExpiringDict' + repr(self.__dict__) -- 1.7.1