Simple question about Queue.Queue and threads

Frank Millman frank at chagford.com
Fri Feb 5 13:45:30 CET 2010


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





More information about the Python-list mailing list