Tim Peters wrote: > > [Guido] > > Would there really be someone out there who uses *intentional* > > resurrection? I severely doubt it. I've never heard of this. > > Why would anyone tell you about something that *works*?! You rarely hear > the good stuff, you know. I gave the typical pattern in the preceding msg. > To flesh out the motivation more, you have some external resource that's > very expensive to set up (in KSR's case, it was an IPC connection to a > remote machine). Rights to use that resource are handed out in the form of > an object. When a client is done using the resource, they *should* > explicitly use the object's .release() method, but you can't rely on that. > So the object's __del__ method looks like (for example): > > def __del__(self): > > # Code not shown to figure out whether to disconnect: the downside to > # disconnecting is that it can cost a bundle to create a new connection. > # If the whole app is shutting down, then of course we want to > disconnect. > # Or if a timestamp trace shows that we haven't been making good use of > # all the open connections lately, we may want to disconnect too. > > if decided_to_disconnect: > self.external_resource.disconnect() > else: > # keep the connection alive for reuse > global_available_connection_objects.append(self) > > This is simple & effective, and it relies on both intentional resurrection > and __del__ getting called repeatedly. I don't claim there's no other way > to write it, just that there's *been* no problem doing this for a millennium > <wink>. > > Note that MAL spontaneously sketched similar examples, although I can't say > whether he's actually done stuff like this. Not exactly this, but similar things in the weak reference implementation of mxProxy. The idea came from a different area: the C implementation of Python uses free lists a lot and these are basically implementations of the same idiom: save an allocated resource for reviving it at some later point. -- Marc-Andre Lemburg ______________________________________________________________________ Business: http://www.lemburg.com/ Python Pages: http://www.lemburg.com/python/
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4