utils.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:kube-aws-flocker 作者: wallnerryan 项目源码 文件源码
def loop_until_success(predicate, timeout=None, message="task"):
    """
    Call predicate every second, until it fires a non-failed Deferred, or hits
    the timeout.

    :param predicate: Callable returning termination condition.
    :type predicate: 0-argument callable returning a Deferred.

    :return: A ``Deferred`` firing with the first non-failed Deferred from
        ``predicate``, or, if predicate didn't fire with non-``Failure``-y
        thing within the timeout, returns the ``Failure``.
    """
    d = maybeDeferred(predicate)
    then = time.time()
    def loop(failure):
        if timeout and time.time() - then > timeout:
            # propogate the failure
            return failure
        print "Retrying %s given result %r..." % (message, failure.getErrorMessage())
        d = deferLater(reactor, 1.0, predicate)
        d.addErrback(loop)
        return d
    d.addErrback(loop)
    return d
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号