On Wed, Dec 10, 2014 at 01:09:50AM +0100, "Fetchinson ." <fetchin...@googlemail.com> wrote: > On 12/10/14, Oleg Broytman <p...@phdru.name> wrote: > > you'd better implement your own > > caching with proper locking. > > Well, that was exactly the question, how would I do that? :) > Precisely for the reason you mention above I was wary of using a more > or less standard caching decorator. Can't I attach the computed value > to the instance itself somehow by setting a new property?
The classical approach is: def __init__(self): self.__cache = None self.__cache_lock = Lock() def _get_value(self): if self.__cache is not None: return self.__cache self.__cache_lock.acquire() try: if self.__cache is not None: # Calculated in another thread return self.__cache self.__cache = ...do expensive calculation once... return self.__cache finally: # finally works both for exceptions and returns self.__cache_lock.release() Oleg. -- Oleg Broytman http://phdru.name/ p...@phdru.name Programmers don't die, they just GOSUB without RETURN. ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk _______________________________________________ sqlobject-discuss mailing list sqlobject-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss