> You may have to write the consumer loop by hand, rather than using > 'for'. In the same-process case, you can do this. > > producer: > sentinel= object( ) > > consumer: > while True: > item= queue.get( ) > if item is sentinel: > break > etc. > > Then, each consumer is guaranteed to consume no more than one > sentinel, and thus producing one sentinel per consumer will halt them > all. > > However, with multiple processes, the comparison to 'sentinel' will > fail, since each subprocess gets a copy, not the original, of the > sentinel.
Rather than use object() you can create a type whose instances are equal. class Stopper(object): def __eq__(self, other): return type(other) == type(self) producer's stop(): queue.put(Stopper()) consumers main loop: for item in iter(queue.get, Stopper()): ... -- http://mail.python.org/mailman/listinfo/python-list