summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinay Sharma <vinay04sharma@icloud.com>2020-07-20 08:42:57 (GMT)
committerGitHub <noreply@github.com>2020-07-20 08:42:57 (GMT)
commitd42528a3a2c7d79fd2e6c9f2a02f3ce12d44c8cc (patch)
treeea20708ad299c206a27218f7738b0d07b0648b85
parent7f03445d01d5ece41c2ceef7254002e08e8ab5a5 (diff)
downloadcpython-d42528a3a2c7d79fd2e6c9f2a02f3ce12d44c8cc.zip
cpython-d42528a3a2c7d79fd2e6c9f2a02f3ce12d44c8cc.tar.gz
cpython-d42528a3a2c7d79fd2e6c9f2a02f3ce12d44c8cc.tar.bz2
bpo-37703: improve asyncio.gather documentation regarding cancellation (GH-15312)
These changes updates the doc to comprehensively mention the behaviour of gather.cancel() Automerge-Triggered-By: @asvetlov
-rw-r--r--Doc/library/asyncio-task.rst8
-rw-r--r--Lib/asyncio/tasks.py7
-rw-r--r--Misc/NEWS.d/next/Documentation/2019-08-16-20-25-42.bpo-37703.Qm_l_H.rst2
3 files changed, 17 insertions, 0 deletions
diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst
index bac99b7..99f0125 100644
--- a/Doc/library/asyncio-task.rst
+++ b/Doc/library/asyncio-task.rst
@@ -387,6 +387,14 @@ Running Tasks Concurrently
# Task C: Compute factorial(4)...
# Task C: factorial(4) = 24
+ .. note::
+ If *return_exceptions* is False, cancelling gather() after it
+ has been marked done won't cancel any submitted awaitables.
+ For instance, gather can be marked done after propagating an
+ exception to the caller, therefore, calling ``gather.cancel()``
+ after catching an exception (raised by one of the awaitables) from
+ gather won't cancel any other awaitables.
+
.. versionchanged:: 3.7
If the *gather* itself is cancelled, the cancellation is
propagated regardless of *return_exceptions*.
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index 5e0692e..c37f0e1 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -729,6 +729,13 @@ def gather(*coros_or_futures, loop=None, return_exceptions=False):
the outer Future is *not* cancelled in this case. (This is to
prevent the cancellation of one child to cause other children to
be cancelled.)
+
+ If *return_exceptions* is False, cancelling gather() after it
+ has been marked done won't cancel any submitted awaitables.
+ For instance, gather can be marked done after propagating an
+ exception to the caller, therefore, calling ``gather.cancel()``
+ after catching an exception (raised by one of the awaitables) from
+ gather won't cancel any other awaitables.
"""
if not coros_or_futures:
if loop is None:
diff --git a/Misc/NEWS.d/next/Documentation/2019-08-16-20-25-42.bpo-37703.Qm_l_H.rst b/Misc/NEWS.d/next/Documentation/2019-08-16-20-25-42.bpo-37703.Qm_l_H.rst
new file mode 100644
index 0000000..a1a1c35
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2019-08-16-20-25-42.bpo-37703.Qm_l_H.rst
@@ -0,0 +1,2 @@
+Updated Documentation to comprehensively elaborate on the behaviour of
+gather.cancel()