[Python-ideas] `__iter__` for queues?
Jesse Noller
jnoller at gmail.com
Wed Jan 20 02:11:13 CET 2010
On Tue, Jan 19, 2010 at 7:08 PM, Raymond Hettinger
<raymond.hettinger at gmail.com> wrote:
>
> 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
+1
More information about the Python-ideas
mailing list