!147 concurrent.futures.wait() now deduplicates futures given as arg.
From: @BruceGW Reviewed-by: @xiezhipeng1 Signed-off-by: @xiezhipeng1
This commit is contained in:
commit
0ce66739af
@ -0,0 +1,102 @@
|
|||||||
|
From 9a9061d1ca7e28dc2b7e326153e933872c7cd452 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miss Islington (bot)"
|
||||||
|
<31488909+miss-islington@users.noreply.github.com>
|
||||||
|
Date: Tue, 4 Jan 2022 06:27:26 -0800
|
||||||
|
Subject: [PATCH] =?UTF-8?q?bpo-20369:=20concurrent.futures.wait()=20now=20?=
|
||||||
|
=?UTF-8?q?deduplicates=20futures=20given=20a=E2=80=A6=20(GH-30168)?=
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
* bpo-20369: concurrent.futures.wait() now deduplicates futures given as arg.
|
||||||
|
|
||||||
|
* 📜🤖 Added by blurb_it.
|
||||||
|
|
||||||
|
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
|
||||||
|
(cherry picked from commit 7d7817cf0f826e566d8370a0e974bbfed6611d91)
|
||||||
|
|
||||||
|
Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
|
||||||
|
---
|
||||||
|
Doc/library/concurrent.futures.rst | 3 ++-
|
||||||
|
Lib/concurrent/futures/_base.py | 13 +++++++------
|
||||||
|
Lib/test/test_concurrent_futures.py | 8 ++++++++
|
||||||
|
.../next/Library/2021-12-17-12-06-40.bpo-20369.zzLuBz.rst | 1 +
|
||||||
|
4 files changed, 18 insertions(+), 7 deletions(-)
|
||||||
|
create mode 100644 Misc/NEWS.d/next/Library/2021-12-17-12-06-40.bpo-20369.zzLuBz.rst
|
||||||
|
|
||||||
|
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
|
||||||
|
index 897efc2..f62b5e3 100644
|
||||||
|
--- a/Doc/library/concurrent.futures.rst
|
||||||
|
+++ b/Doc/library/concurrent.futures.rst
|
||||||
|
@@ -435,7 +435,8 @@ Module Functions
|
||||||
|
.. function:: wait(fs, timeout=None, return_when=ALL_COMPLETED)
|
||||||
|
|
||||||
|
Wait for the :class:`Future` instances (possibly created by different
|
||||||
|
- :class:`Executor` instances) given by *fs* to complete. Returns a named
|
||||||
|
+ :class:`Executor` instances) given by *fs* to complete. Duplicate futures
|
||||||
|
+ given to *fs* are removed and will be returned only once. Returns a named
|
||||||
|
2-tuple of sets. The first set, named ``done``, contains the futures that
|
||||||
|
completed (finished or cancelled futures) before the wait completed. The
|
||||||
|
second set, named ``not_done``, contains the futures that did not complete
|
||||||
|
diff --git a/Lib/concurrent/futures/_base.py b/Lib/concurrent/futures/_base.py
|
||||||
|
index 6095026..5c00f2e 100644
|
||||||
|
--- a/Lib/concurrent/futures/_base.py
|
||||||
|
+++ b/Lib/concurrent/futures/_base.py
|
||||||
|
@@ -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:
|
||||||
|
@@ -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."""
|
||||||
|
diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py
|
||||||
|
index 48d56d9..d693fb4 100644
|
||||||
|
--- a/Lib/test/test_concurrent_futures.py
|
||||||
|
+++ b/Lib/test/test_concurrent_futures.py
|
||||||
|
@@ -564,6 +564,14 @@ create_executor_tests(ProcessPoolShutdownTest,
|
||||||
|
|
||||||
|
|
||||||
|
class WaitTests:
|
||||||
|
+ def test_20369(self):
|
||||||
|
+ # See https://bugs.python.org/issue20369
|
||||||
|
+ future = self.executor.submit(time.sleep, 1.5)
|
||||||
|
+ done, not_done = futures.wait([future, future],
|
||||||
|
+ return_when=futures.ALL_COMPLETED)
|
||||||
|
+ self.assertEqual({future}, done)
|
||||||
|
+ self.assertEqual(set(), not_done)
|
||||||
|
+
|
||||||
|
|
||||||
|
def test_first_completed(self):
|
||||||
|
future1 = self.executor.submit(mul, 21, 2)
|
||||||
|
diff --git a/Misc/NEWS.d/next/Library/2021-12-17-12-06-40.bpo-20369.zzLuBz.rst b/Misc/NEWS.d/next/Library/2021-12-17-12-06-40.bpo-20369.zzLuBz.rst
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..cc5cd00
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/Misc/NEWS.d/next/Library/2021-12-17-12-06-40.bpo-20369.zzLuBz.rst
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+:func:`concurrent.futures.wait` no longer blocks forever when given duplicate Futures. Patch by Kumar Aditya.
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
10
python3.spec
10
python3.spec
@ -3,7 +3,7 @@ Summary: Interpreter of the Python3 programming language
|
|||||||
URL: https://www.python.org/
|
URL: https://www.python.org/
|
||||||
|
|
||||||
Version: 3.9.9
|
Version: 3.9.9
|
||||||
Release: 6
|
Release: 7
|
||||||
License: Python
|
License: Python
|
||||||
|
|
||||||
%global branchversion 3.9
|
%global branchversion 3.9
|
||||||
@ -90,6 +90,7 @@ Patch111: 00111-no-static-lib.patch
|
|||||||
Patch251: 00251-change-user-install-location.patch
|
Patch251: 00251-change-user-install-location.patch
|
||||||
Patch6000: backport-Add--with-wheel-pkg-dir-configure-option.patch
|
Patch6000: backport-Add--with-wheel-pkg-dir-configure-option.patch
|
||||||
Patch6001: backport-bpo-46811-Make-test-suite-support-Expat-2.4.5.patch
|
Patch6001: backport-bpo-46811-Make-test-suite-support-Expat-2.4.5.patch
|
||||||
|
Patch6002: backport-bpo-20369-concurrent.futures.wait-now-deduplicates-f.patch
|
||||||
|
|
||||||
Patch9000: add-the-sm3-method-for-obtaining-the-salt-value.patch
|
Patch9000: add-the-sm3-method-for-obtaining-the-salt-value.patch
|
||||||
|
|
||||||
@ -177,6 +178,7 @@ rm -r Modules/expat
|
|||||||
%patch251 -p1
|
%patch251 -p1
|
||||||
%patch6000 -p1
|
%patch6000 -p1
|
||||||
%patch6001 -p1
|
%patch6001 -p1
|
||||||
|
%patch6002 -p1
|
||||||
|
|
||||||
%patch9000 -p1
|
%patch9000 -p1
|
||||||
|
|
||||||
@ -793,6 +795,12 @@ export BEP_GTDLIST="$BEP_GTDLIST_TMP"
|
|||||||
%{_mandir}/*/*
|
%{_mandir}/*/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Mar 15 2022 BruceGW <gyl93216@163.com> - 3.9.9-7
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:concurrent.futures.wait() now deduplicates futures given as arg.
|
||||||
|
|
||||||
* Wed Mar 09 2022 shixuantong <shixuantong@h-partners.com> - 3.9.9-6
|
* Wed Mar 09 2022 shixuantong <shixuantong@h-partners.com> - 3.9.9-6
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- CVE:NA
|
- CVE:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user