[Zope] storing persisten object in python dictionaries

Jürgen Herrmann Juergen.Herrmann at XLhost.de
Thu Oct 26 09:25:36 EDT 2006


On Thu, October 26, 2006 15:00, Marco Bizzarri wrote:
> On 10/26/06, Jürgen Herrmann <Juergen.Herrmann at xlhost.de> wrote:
>>
>> On Thu, October 26, 2006 14:53, Marco Bizzarri wrote:
>> > Storing persistent object in object outside of ZODB can incur in the
>> > problem of passing object(s) between threads, and, therefore, passing
>> > one object which is related to a connection on the ZODB to another
>> > context with a different connection.
>
>> ok, this is probably the problem here, so would haveing a cache dict
>> for each thread help? there are only about 50-100 containers so the
>> memory overhead would be neglible compared to the performance gained.
>
> Yes, this should probably resolve your issue.
>
ok, just reimplemented my _classContainer(className) method as follows:

    def _classContainer(self, className):
        """ return the instances folder for className """
        thread = currentThread()
        containerDict = getattr(thread, '_relClsContainerDict', None)
        if containerDict is None:
            containerDict = {}
            thread._relClsContainerDict = containerDict
        container = containerDict.get(className, None)
        if container is None:
            container = self.unrestrictedTraverse(self._classContainerPath(className))
            containerDict[className] = container
        return container

it seems to work fine, all tests pass, though i have a somewhat bad
feeliong of setting an attribute on the thread object directly.
comments?

best regards, jürgen herrmann
_______________________________________________________________________

>> XLhost.de - eXperts in Linux hosting <<

Jürgen Herrmann
Konrad Adenauer Allee 43, DE-93051 Regensburg

Fon:  +49 (0)700 XLHOSTDE [0700 95467833]
Fax:  +49 (0)721 151 463027
WEB:  http://www.XLhost.de


More information about the Zope mailing list