[Zope] Zope and Threads

Dieter Maurer dieter@handshake.de
Thu, 10 Jul 2003 20:18:34 +0200


alan runyan wrote at 2003-7-9 13:06 -0500:
 > Just wanted to post this for whoever searches for Zope,
 > Threads and ZSQLMethods or relational databases in the future.  It seems 
 > that very simplistic things will work
 > if you spawn a thread inside of Zope.  But in the thread
 > if you start doing anything really related to ZODB
 > you could have all sorts of issues.

The mailing list archives have some threads about this...

There are a few issues you must observe:

     In general you must not share a ZODB connection between
     threads. This means, you must not pass persistent objects
     between threads (as they contain a hidden reference to
     a ZODB connection (_p_jar) and may use it non-deterministically).

     Open a new ZODB connection in the new thread.
     Its "root()" method returns the ZODB root object.

     Pass an object's path between threads rather than the object
     itself. Use "[un]restrictedTraverse" to locate the object
     from the root given the path.

     Do not forget to commit/abort the (implicitly) started transaction.

     Do not forget to close the opened ZODB connection


Dieter