Multiple modules with database access + general app design?

Robin Haswell rob at digital-crocus.com
Thu Jan 19 09:01:25 EST 2006


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




More information about the Python-list mailing list