On 2007-04-16, Paul Rubin <http> wrote: > I'd like to suggest adding a new operation > > Queue.finish() > > This puts a special sentinel object on the queue. The sentinel > travels through the queue like any other object, however, when > q.get() encounters the sentinel, it raises StopIteration instead > of returning the sentinel. It does not remove the sentinel from > the queue, so further calls to q.get also raise StopIteration. > That permits writing the typical "worker thread" as > > for item in iter(q.get): ... >
The problem is this doesn't work well if you have multiple producers. One producer can be finished while the other is still putting values on the queue. The solution I have been thinking on is the following. Add an open and close operation. Only threads that have the queue open can access it. The open call should specify whether you want to read or write to the queue or both. When all writers have closed the queue and the queue is empty a q.get will raise an exception. This may be done by putting a sentinel on the queue when the last writer closed the queue. -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list