def retry_on_EAGAIN()

in teamcity/output.py [0:0]


def retry_on_EAGAIN(callable):
    # output seems to be non-blocking when running under teamcity.
    @wraps(callable)
    def wrapped(*args, **kwargs):
        start_time = _time()
        while True:
            try:
                return callable(*args, **kwargs)
            except IOError as e:
                if e.errno != errno.EAGAIN:
                    raise
                # Give up after a minute.
                if _time() - start_time > 60:
                    raise
                time.sleep(.1)

    return wrapped