Python可迭代队列

pom*_*ber 8 python iteration queue

我需要知道何时关闭队列并且不会有更多项目因此我可以结束迭代.

我通过在队列中放置一个标记来做到这一点:

from Queue import Queue

class IterableQueue(Queue): 

    _sentinel = object()

    def __iter__(self):
        return self

    def close(self):
        self.put(self._sentinel)

    def next(self):
        item = self.get()
        if item is self._sentinel:
            raise StopIteration
        else:
            return item
Run Code Online (Sandbox Code Playgroud)

鉴于这是队列的一个非常常见的用途,是不是有任何内置实现?

Ray*_*ger 12

对于生产者来说,哨兵是一种合理的方式,可以发送不再有队列任务的消息.

FWIW,你的代码可以用iter()的两个参数形式简化:

from Queue import Queue

class IterableQueue(Queue): 

    _sentinel = object()

    def __iter__(self):
        return iter(self.get, self._sentinel)

    def close(self):
        self.put(self._sentinel)
Run Code Online (Sandbox Code Playgroud)