-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Ben Last 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)? Persistent objects are held in per-thread caches; module-level stuff is ~ *not* part of that cache. People sometimes fake out thread-level caches by assigning "volatile" attributes to persistent objects (attributes whose names start with '_v_'); the downside is that such attributes go away whenever the persistent object is "ghostified", which may occur at unpredictable times (e.g., at transaction or subtransaction boundaries). |> 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? Threads which use "normal" import statements (rather than hacking around with '__import__') won't have separate copies of Python modules. I don't know that product, but it sounds like it might be what you need. Remind me again what you need a per-thread cache for? Could you scribble on the REQUEST object instead? Tres. - -- =============================================================== Tres Seaver tseaver@zope.com Zope Corporation "Zope Dealers" http://www.zope.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFB/8UZGqWXf00rNCgRAkdzAJ4/qFY6fMLFn82s+gWl9PVGh3OjGACdEcpH BCjKHO/frTyksThe+y7EMQU= =PL45 -----END PGP SIGNATURE-----