Robin Haswell wrote: > On Thu, 19 Jan 2006 14:37:34 +0100, Daniel Dittmar wrote: >>If you use a threading server, you can't put the connection object into >>the module. Modules and hence module variables are shared across >>threads. You could use thread local storage, but I think it's better to >>pass the connection explicitely as a parameter. > > > Would you say it would be better if in every thread I did: > > m = getattr(modules, module) > b.db = db > > ... > > def Foo(): > c = db.cursor() >
I was thinking (example from original post): import modules modules.foo.Bar(db.cursor ()) # file modules.foo def Bar (cursor): cursor.execute (...) The same is true for other objects like the HTTP request: always pass them as parameters because module variables are shared between threads. If you have an HTTP request object, then you could attach the database connection to that object, that way you have to pass only one object. Or you create a new class that encompasses everything useful for this request: the HTTP request, the database connection, possibly an object containing authorization infos etc. I assume that in PHP, global still means 'local to this request', as PHP probably runs in threads under Windows IIS (and Apache 2.0?). In Python, you have to be more explicit about the scope. Daniel -- http://mail.python.org/mailman/listinfo/python-list