[Python-ideas] `__iter__` for queues?
Raymond Hettinger
raymond.hettinger at gmail.com
Wed Jan 20 01:08:29 CET 2010
On Jan 19, 2010, at 1:10 PM, Simon Brunning wrote:
> 2010/1/19 cool-RR <cool-rr at cool-rr.com>:
>> Is there a reason that queues don't have an `__iter__` method? I mean both
>> `Queue.Queue` and `multiprocessing.Queue`.
>
> Could it be made threadsafe?
To me, this is exactly the right line of questioning.
Is there a use case for iterating through a queue
that is being mutated by consumers and producers?
If so, should the consumers and producers be locked
out during iteration or should the iterator fail if it detects
a mutation (like we currently do for dictionaries that
change during iteration).
The semantics should be dictated by use cases.
When someone writes "for t in q: action(q)" what
is the most useful thing to happen when another
thread does a get or put?
My personal opinion is that queues are better-off without
an iterator. They serve mainly to buffer consumers and
producers and iteration does fit in well. In other words,
adding __iter__ to queues in threaded environment
may do more harm than good.
Raymond
More information about the Python-ideas
mailing list