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))
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)
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__)