On Thu, 19 Jan 2006 14:37:34 +0100, Daniel Dittmar wrote: > Robin Haswell wrote: >> cursor for every class instance. This application runs in a very simple >> threaded socket server - every time a new thread is created, we create a >> new db.cursor (m = getattr(modules, module)\n m.c = db.cursor() is the >> first part of the thread), and when the thread finishes all its actions >> (of which there are many, but all sequential), the thread exits. I don't > > 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() ? > >> separate connection, but I get the feeling that a lot of cursors = a lot >> of connections. I'd much prefer each method call with a thread to reuse >> that thread's connection, as creating a connection incurs significant >> overhead on the MySQL server and DNS server. > > You can create several cursor objects from one connection. There should > be no problems if you finish processing of one cursor before you open > the next one. In earlier (current?) versions of MySQL, only one result > set could be opened at a time, so using cursors in parallel present some > problems to the driver implementor. > > Daniel -- http://mail.python.org/mailman/listinfo/python-list