On Wed, Dec 10, 2014 at 01:09:50AM +0100, "Fetchinson ."
<[email protected]> wrote:
> On 12/10/14, Oleg Broytman <[email protected]> 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/ [email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss