Thanks Tres, I've ended up with a module that seems to
be working well, I'll post it as its small and might be useful for
people googling in the future.

"""Helper utilities for working with threads."""

from ZODB.interfaces import IDatabase
from import zapi
from import traverseName
from import setSite
from import ISite
from transaction import manager

def setupWorkerThread(path):
   """sets up the regular contexts for your worker thread, takes a path which
   can be found with, the site context of
   your thread will be configured based on this path and the object at the
   path returned."""

   db = zapi.getUtility(IDatabase) #XXX assumes we have only one db
   conn =
   root = conn.root()

   ctx = root['Application']
   for seg in path.split('/')[1:]:
       ctx = traverseName(ctx, seg.encode("ASCII"))
       if ISite.providedBy(ctx):
   return ctx

def closeWorkerThread():

On 7/3/07, Jim Fulton <[EMAIL PROTECTED]> wrote:
What Tres said. :)


On Jun 29, 2007, at 8:54 AM, Tres Seaver wrote:

> Hash: SHA1
> Tim Stebbing wrote:
>> G'day,
>> I've recently ran into a bit of a problem attempting to use
>> threads in
>> zope 3.2.1, hooks.getSite() returns None, and any attempt to get a
>> utility results in a component lookup error within my threads.
>> I've attempted to pass a site into a thread and set it with
>> hooks.setSite() but this is apparently not the way to go, I get the
>> feeling that a thread that needs access to things form the database
>> probably needs its own connection, context etc.
> Your worker thread almost certainly needs its own database
> connection(s):  applicaiton code typically relies on the isolation
> provided by connection-per-thread, which means that it is not
> "safe" in
> general to share persistent objects between threads.
> Assuming that you do grab a connection and get its root object, you
> should then be able to traverse to your friendly local site manager,
> calling 'setSite' at *each* parent site manager you pass along the
> way.
>> I'm aware of ITask's but unsure if developers are supposed to use
>> them
>> for their own purposes? Do these handle setting up of contexts like
>> db, site, global utils etc? I've googled around a fair bit and been
>> over all the z3 doco, it would be great if there was a simple
>> howto on
>> setting up a thread that would have the usual access to various
>> components.
> Tres.
> - --
> ===================================================================
> Tres Seaver          +1 540-429-0999          [EMAIL PROTECTED]
> Palladion Software   "Excellence by Design"
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: Using GnuPG with Mozilla -
> iD8DBQFGhQEG+gerLs4ltQ4RAh6EAJ9DzBW20NPz4tAE3BydJ789Vokx0wCg2qMp
> yBB8XemrjD7dXPwwwz4y9Yo=
> =+iwh
> _______________________________________________
> Zope3-dev mailing list
> Unsub:

Jim Fulton                      mailto:[EMAIL PROTECTED]             Python 
CTO                             (540) 361-1714         
Zope Corporation   

Timothy J Stebbing
Zope3-dev mailing list

Reply via email to