requests-html icon indicating copy to clipboard operation
requests-html copied to clipboard

Fix the return order of AsyncHTMLSession.run

Open acjh opened this issue 2 years ago • 0 comments

Fixes #480 Stack Overflow question: AsyncHTMLSession returns responses list disorderly! How to sort or make list ordered?

done is a set, which is unordered.

Since AsyncHTMLSession.run calls run_until_complete(...), all tasks are in done, so we can just iterate tasks.

This change is backward-compatible.

done is not in the order of completion, unlike asyncio.as_completed, so there is no loss of information in this change.

From https://github.com/python/cpython/blob/4cc63e0/Lib/asyncio/tasks.py#L535-L541:

    done, pending = set(), set()
    for f in fs:
        if f.done():
            done.add(f)
        else:
            pending.add(f)
    return done, pending

where fs = set(tasks).

acjh avatar Feb 04 '23 04:02 acjh