(fs, waiter, ref_collect)
Iterate on the list *fs*, yielding finished futures one by one in
    reverse order.
    Before yielding a future, *waiter* is removed from its waiters
    and the future is removed from each set in the collection of sets
    *ref_collect*.

    The aim of this function is to avoid keeping stale references after
    the future is yielded and before the iterator resumes.
Iterate on the list *fs*, yielding finished futures one by one in
    reverse order.
    Before yielding a future, *waiter* is removed from its waiters
    and the future is removed from each set in the collection of sets
    *ref_collect*.
Iterate on the list * fs * yielding finished futures one by one in reverse order . Before yielding a future * waiter * is removed from its waiters and the future is removed from each set in the collection of sets * ref_collect * .
def _yield_finished_futures(fs, waiter, ref_collect):
    """
    Iterate on the list *fs*, yielding finished futures one by one in
    reverse order.
    Before yielding a future, *waiter* is removed from its waiters
    and the future is removed from each set in the collection of sets
    *ref_collect*.

    The aim of this function is to avoid keeping stale references after
    the future is yielded and before the iterator resumes.
    """
    while fs:
        f = fs[-1]
        for futures_set in ref_collect:
            futures_set.remove(f)
        with f._condition:
            f._waiters.remove(waiter)
        del f
        # Careful not to keep a reference to the popped value
        yield fs.pop()
def _yield_finished_futures ( fs , waiter , ref_collect ) : while fs : f = fs [ - 1 ] for futures_set in ref_collect : futures_set . remove ( f ) with f . _condition : f . _waiters . remove ( waiter ) del f # Careful not to keep a reference to the popped value yield fs . pop ( )