Dieter Maurer wrote:
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...
Just checking that I understand the whole thing correctly?
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.
I guess it would look something like this? import Globals db=Globals.DB connection=db.open() root = connection.root()
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.
Using get_transaction().commit() and get_transaction().abort() as usual I guess?
Do not forget to close the opened ZODB connection
With: connection.close() What about connection.sync(), I would think it syncs commited data fin other threads back to this connection? In other words I need to use this in my thread to get an updated view of the database. Is this correct? Johan -- Johan Carlsson Tel: + 46 8 31 24 94 Colliberty Mob: + 46 70 558 25 24 Torsgatan 72 Email: johanc@easypublisher.com SE-113 37 STOCKHOLM