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)
| 归档时间: |
|
| 查看次数: |
7024 次 |
| 最近记录: |