def _iterate(reactor, intervals, f):
"""
Run a function repeatedly.
:param reactor: See ``run_many_service``.
:return Deferred: A deferred which fires when ``f`` fails or when
``intervals`` is exhausted.
"""
while True:
before = reactor.seconds()
yield f()
after = reactor.seconds()
try:
interval = next(intervals)
except StopIteration:
break
delay = max(0, interval - (after - before))
yield deferLater(reactor, delay, lambda: None)
评论列表
文章目录