Issue #20319: concurrent.futures.wait() can block forever even if Futures have completed
Applied 403f8cf425
This commit is contained in:
parent
35e77648b7
commit
a6b180a71f
@ -227,7 +227,8 @@ def as_completed(fs, timeout=None):
|
|||||||
|
|
||||||
finally:
|
finally:
|
||||||
for f in fs:
|
for f in fs:
|
||||||
f._waiters.remove(waiter)
|
with f._condition:
|
||||||
|
f._waiters.remove(waiter)
|
||||||
|
|
||||||
DoneAndNotDoneFutures = collections.namedtuple(
|
DoneAndNotDoneFutures = collections.namedtuple(
|
||||||
'DoneAndNotDoneFutures', 'done not_done')
|
'DoneAndNotDoneFutures', 'done not_done')
|
||||||
@ -274,7 +275,8 @@ def wait(fs, timeout=None, return_when=ALL_COMPLETED):
|
|||||||
|
|
||||||
waiter.event.wait(timeout)
|
waiter.event.wait(timeout)
|
||||||
for f in fs:
|
for f in fs:
|
||||||
f._waiters.remove(waiter)
|
with f._condition:
|
||||||
|
f._waiters.remove(waiter)
|
||||||
|
|
||||||
done.update(waiter.finished_futures)
|
done.update(waiter.finished_futures)
|
||||||
return DoneAndNotDoneFutures(done, set(fs) - done)
|
return DoneAndNotDoneFutures(done, set(fs) - done)
|
||||||
|
Loading…
Reference in New Issue
Block a user