Am 20.10.2011 05:55, schrieb Steven D'Aprano: > # Make consumer threads. > class ThreadSql(threading.Thread): > def __init__(self, queue): > threading.Thread.__init__(self) > self.queue = queue > # Open database connection instance > self.session = "+++connection+++" # DbConnect() > self._open = True > > def run(self): > while self._open: > # Grab a query from queue. > query = self.queue.get() > # And process it. > print self, query > time.sleep(1) > # Mark the queue job as done. > self.queue.task_done() > > def close(self): > print "Closing", self > # self.session.Disconnect(<abort, commit>) > self._open = False
The code may contain a subtle and nasty bug but this really depends on your database connection. Most db connections are neither thread safe nor reentrant and must not be shared between threads. However this code shares the connection across two threads. The __init__() method is run inside the thread that *creates* the new thread, not the new thread. Just the run() is executed in the new thread. I suggest that you acquire and close the connection inside the run() method protected by an try/finally or with block. Christian -- http://mail.python.org/mailman/listinfo/python-list