【发布时间】:2016-03-02 12:09:34
【问题描述】:
考虑以下简单的循环实现:
from itertools import chain, repeat
class RoundRobin:
def __init__(self, iterable):
self._iterable = set(iterable)
def __iter__(self):
for value in chain.from_iterable(repeat(self._iterable)):
yield value
示例用法:
machines = ['test1', 'test2',
'test3', 'test4']
rr_machines = RoundRobin(machines)
for machine in rr_machines:
# Do something
pass
虽然这可行,但我想知道是否有一种方法可以修改 RoundRobin 类中的可迭代对象,这也会影响现有的迭代器。
例如假设当我使用迭代器中的值时,集合中的一台机器变得不可用,我想阻止它被返回。
我能想到的唯一解决方案是实现一个单独的Iterator 类。当然,这仍然是一个问题,当所有机器都变得不可用并且无法返回更多值时该怎么办(StopIteration 异常?)。
【问题讨论】:
-
机器不可用时为什么不能使用
continue语句? -
@AswinMurugesh 是的,但请考虑(尽管我承认在我的问题中没有指定)可能有多个线程使用 RR 代码,我想向我的 RR 类发出信号,其中之一机器变得不可用,无需单独通知每个线程。 (我不确定这实际上是否更清楚......)
-
在这种情况下,你有一个类的静态变量,它可能是一组不可用的机器,并在 continue 语句之前将机器号添加到集合中
标签: python-3.x