◐ Shell
clean mode source ↗

[3.10] bpo-20369: concurrent.futures.wait() now deduplicates futures given a… (GH-30168) by miss-islington · Pull Request #30400 · python/cpython

Expand Up @@ -284,13 +284,14 @@ def wait(fs, timeout=None, return_when=ALL_COMPLETED): A named 2-tuple of sets. The first set, named 'done', contains the futures that completed (is finished or cancelled) before the wait completed. The second set, named 'not_done', contains uncompleted futures. futures. Duplicate futures given to *fs* are removed and will be returned only once. """ fs = set(fs) with _AcquireFutures(fs): done = set(f for f in fs if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]) not_done = set(fs) - done
done = {f for f in fs if f._state in [CANCELLED_AND_NOTIFIED, FINISHED]} not_done = fs - done if (return_when == FIRST_COMPLETED) and done: return DoneAndNotDoneFutures(done, not_done) elif (return_when == FIRST_EXCEPTION) and done: Expand All @@ -309,7 +310,7 @@ def wait(fs, timeout=None, return_when=ALL_COMPLETED): f._waiters.remove(waiter)
done.update(waiter.finished_futures) return DoneAndNotDoneFutures(done, set(fs) - done) return DoneAndNotDoneFutures(done, fs - done)
class Future(object): """Represents the result of an asynchronous computation.""" Expand Down