Hi all

Assume you have a server process running, a pool of worker threads to perform tasks, and a Queue.Queue() to pass the tasks to the workers.

In order to shut down the server cleanly, you want to ensure that the workers have all finished their tasks. I like the technique of putting a None onto the queue, and have each worker check for None, put None back onto the queue, and terminate itself.

The main program would look something like this -

   q.put(None)
   for worker in worker_threads:
       worker.join()

At this point you can be sure that each thread has completed its tasks and terminated itself.

However, the queue is not empty - it still has the final None in it.

Is it advisable to finalise the cleanup like this? -

   while not q.empty():
       q.get()
       q.task_done()
   q.join()

Or is this completely redundant?

Thanks

Frank Millman


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to