[Zope] Re: Global variables in ExternalMethod modules

Ben Last (Zope) zope at benlast.com
Tue Feb 1 12:37:14 EST 2005


Tres Seaver wrote:
> If this *were* a true module (see below), you would not be getting
> per-thread semantics from it;  you would need to keep a mapping keyed by
> thread ID to get such semantics.
I'd been told a while back that "each Zope thread has its own namespaces
and therefore its own copy of any given module-level variable".  Is this
false (given what you say below about ExternalMethod implementations not
being real modules)?

> The files containing ExternalMethod implementations are not "modules",
> really, and so your expectations about module-level globals are not
> being met.  Instead, the EM machinery "execs" the text of the EM file in
> a custom namespacee, and then extracts the code object from it.
> 
> I think you are headed into "build a product" territory here, unless you
> want your EM to monkey-patch its cache into an existing module somewhere.
Ouch.  "Build a product" isn't an option for us, for a whole bunch of
reasons.  I guess one way to deal with this, then, would be to put the
module-level objects in *another* module and import *that*?

Does each Zope thread get its own copy of an imported module, or would I
need to use something like Dieter's SharedResource to keep, say, a dict
of connections keyed by thread id?

Many thanks for your help

Regards

Ben



More information about the Zope mailing list