Diez B. Roggisch wrote: > Rick Lawson wrote: > >> On Jul 15, 4:53 am, Jonathan Gardner <jgard...@jonathangardner.net> >> wrote: >>> On Jul 14, 6:34 pm, Rick Lawson <lawso...@gmail.com> wrote: >>> >>> > Appreciate any help on this. I am porting an app from Java to python >>> > and need generic object pooling with hooks for object initialization / >>> > cleanup and be able to specify an object timeout. >>> >>> Are you looking for something like a thread pool or a connection pool? >>> Such a thing is easy to code in Python. Might as well write one from >>> scratch for your particular need. >>> >>> By the way, a tip for writing Python: Forget Java. If you're porting >>> an app, consider rewriting it from the architecture on up. You'll save >>> yourself time and get a better result. >> >> Jonathan, >> >> Thanks for the advice but would like to pick your brain a little more. >> The pool I need is not a thread pool or db pool. I need to pool >> objects which are a proxy for an external C process that communicates >> via sockets. The pool is necessary because the initial connection/ >> authentication is expensive, plus the connection needs to be recycled >> every so often due to instability on the C side. The existing Java >> code uses commons-pool which incidentally is the base object pool for >> a db connection pooling library (DBCP). Anyway, maybe this is just so >> easy to do in Python that everyone rolls their own - but I have done a >> lot of googling with no luck. >> >> I just hate to re-invent the wheel here - I guess I should look at a >> db connection pooling library and see if they have a generic object >> pool somewhere in there. Any you can recommend that are more or less >> standalone db connection pool libraries ? > > I don't know enough about your domain, e.g. if your pooled objects have > state or not. > > Assuming that > > - they are objects > - they don't have state (like database connections) > - you want to recycle them after so many calls > > one of the simplest solutions would be something like this: > > class AutoDestructingWrapper(object): > > MAX_CALL_COUNT = 1000 > > def __init__(self, object_factory): > self._object_factory = object_factory > self._call_count = self.MAX_CALL_COUNT > >
This must be def __getattr__(self, name): self._call_count += 1 if self._call_count >= self.MAX_CALL_COUNT: self._delegate = self._object_factory() self._call_count = 0 return getattr(self._delegate, name) of course. Diez -- http://mail.python.org/mailman/listinfo/python-list