def as_completed(objects, count=None, timeout=None):
    """Wait for one or more waitable objects, yielding them as they become
    ready.

    This is the iterator/generator version of :func:`wait`.
    """
    for obj in objects:
        if not hasattr(obj, 'add_done_callback'):
            raise TypeError('Expecting sequence of waitable objects')
    if count is None:
        count = len(objects)
    if count < 0 or count > len(objects):
        raise ValueError('count must be between 0 and len(objects)')
    if count == 0:
        return
    pending = list(objects)
    for obj in _wait(pending, timeout):
        yield obj
        count -= 1
        if count == 0:
            break
Wait for one or more waitable objects, yielding them as they become
    ready.

    This is the iterator/generator version of :func:`wait`.