Threading: Method trigger after thred finished

markus.mj at gmail.com markus.mj at gmail.com
Wed Oct 19 16:14:21 EDT 2011


Hi,
I am looking for help with following problem. I scripted threaded database query, with session open per thread, and queries delivered through queue. Every open DB session must be closed with "abort" or "commit", however on which event should I trigger the DB disconnect? Ideally it would close the DB as the thread class gets deconstructed, but "__del__" does never fire. How would you solve the problem? Here an non working example (bended from IBM developerWorks tutorial) that explains the situation:
<code>
multi_query = ["query1","query2","query3","query4","query5","query6"]
queue = Queue.Queue()
 
class ThreadSql(threading.Thread):
	def __init__(self, queue):
		threading.Thread.__init__(self)
		self.queue = queue
		#Open database connection instance
		self.session = DbConnect()
	
	def run(self):
		while True:
			#grabs query from queue
			query = self.queue.get()
			#Fire query and print result
			print self.session.SQL(query)
			#Queue job is done
			self.queue.task_done()
	
	# THIS PART IS NOT WORKING
	def __del__(self):
		#Disconnect Database session and commit or abort transactions
		self.session.Disconnect(<abort, commit>)
		print "The End"
	#---------------------------------
for i in range(5):
	t = ThreadUrl(queue)
	t.setDaemon(True)
	t.start() 
#Fill the queue
for single_query in multi_query:
	queue.put(single_query)
#Wait until query is empty and finish
queue.join()
</code>
Thank you for any idea!
Markus


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /