https://github.com/python/cpython/commit/8680b18f265975e9578c2b85673b08b080…
commit: 8680b18f265975e9578c2b85673b08b080bd1eaa
branch: 3.14
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: picnixz <10796600+picnixz(a)users.noreply.github.com>
date: 2025-12-31T20:51:31Z
summary:
[3.14] gh-140920: remove incorrect mentions to `concurrent.futures.interpreter.ExecutionFailed` (GH-141723) (#143315)
gh-140920: remove incorrect mentions to `concurrent.futures.interpreter.ExecutionFailed` (GH-141723)
Remove documentation for inexistant `concurrent.futures.interpreter.ExecutionFailed`
and replace its occurrences by `concurrent.interpreters.ExecutionFailed` since this
is the documented exception.
(cherry picked from commit c5215978ebfea9471f313d5baa70a4e68bfb798b)
Co-authored-by: Lakshya Upadhyaya <lakshya.upadhyaya05(a)gmail.com>
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index 18d92e8e9959a9..8b6d749f40cbf0 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -308,7 +308,7 @@ the bytes over a shared :mod:`socket <socket>` or
.. note::
The executor may replace uncaught exceptions from *initializer*
- with :class:`~concurrent.futures.interpreter.ExecutionFailed`.
+ with :class:`~concurrent.interpreters.ExecutionFailed`.
Other caveats from parent :class:`ThreadPoolExecutor` apply here.
@@ -320,11 +320,11 @@ likewise serializes the return value when sending it back.
When a worker's current task raises an uncaught exception, the worker
always tries to preserve the exception as-is. If that is successful
then it also sets the ``__cause__`` to a corresponding
-:class:`~concurrent.futures.interpreter.ExecutionFailed`
+:class:`~concurrent.interpreters.ExecutionFailed`
instance, which contains a summary of the original exception.
In the uncommon case that the worker is not able to preserve the
original as-is then it directly preserves the corresponding
-:class:`~concurrent.futures.interpreter.ExecutionFailed`
+:class:`~concurrent.interpreters.ExecutionFailed`
instance instead.
@@ -720,15 +720,6 @@ Exception classes
.. versionadded:: 3.14
-.. exception:: ExecutionFailed
-
- Raised from :class:`~concurrent.futures.InterpreterPoolExecutor` when
- the given initializer fails or from
- :meth:`~concurrent.futures.Executor.submit` when there's an uncaught
- exception from the submitted task.
-
- .. versionadded:: 3.14
-
.. currentmodule:: concurrent.futures.process
.. exception:: BrokenProcessPool
https://github.com/python/cpython/commit/c5215978ebfea9471f313d5baa70a4e68b…
commit: c5215978ebfea9471f313d5baa70a4e68bfb798b
branch: main
author: Lakshya Upadhyaya <lakshya.upadhyaya05(a)gmail.com>
committer: picnixz <10796600+picnixz(a)users.noreply.github.com>
date: 2025-12-31T21:45:41+01:00
summary:
gh-140920: remove incorrect mentions to `concurrent.futures.interpreter.ExecutionFailed` (#141723)
Remove documentation for inexistant `concurrent.futures.interpreter.ExecutionFailed`
and replace its occurrences by `concurrent.interpreters.ExecutionFailed` since this
is the documented exception.
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index 18d92e8e9959a9..8b6d749f40cbf0 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -308,7 +308,7 @@ the bytes over a shared :mod:`socket <socket>` or
.. note::
The executor may replace uncaught exceptions from *initializer*
- with :class:`~concurrent.futures.interpreter.ExecutionFailed`.
+ with :class:`~concurrent.interpreters.ExecutionFailed`.
Other caveats from parent :class:`ThreadPoolExecutor` apply here.
@@ -320,11 +320,11 @@ likewise serializes the return value when sending it back.
When a worker's current task raises an uncaught exception, the worker
always tries to preserve the exception as-is. If that is successful
then it also sets the ``__cause__`` to a corresponding
-:class:`~concurrent.futures.interpreter.ExecutionFailed`
+:class:`~concurrent.interpreters.ExecutionFailed`
instance, which contains a summary of the original exception.
In the uncommon case that the worker is not able to preserve the
original as-is then it directly preserves the corresponding
-:class:`~concurrent.futures.interpreter.ExecutionFailed`
+:class:`~concurrent.interpreters.ExecutionFailed`
instance instead.
@@ -720,15 +720,6 @@ Exception classes
.. versionadded:: 3.14
-.. exception:: ExecutionFailed
-
- Raised from :class:`~concurrent.futures.InterpreterPoolExecutor` when
- the given initializer fails or from
- :meth:`~concurrent.futures.Executor.submit` when there's an uncaught
- exception from the submitted task.
-
- .. versionadded:: 3.14
-
.. currentmodule:: concurrent.futures.process
.. exception:: BrokenProcessPool
https://github.com/python/cpython/commit/469fe33edd92b8586d6995d07384b52170…
commit: 469fe33edd92b8586d6995d07384b52170067c76
branch: main
author: Sam Gross <colesbury(a)gmail.com>
committer: colesbury <colesbury(a)gmail.com>
date: 2025-12-30T19:45:23-05:00
summary:
gh-143121: Avoid thread leak in configure (gh-143122)
If you are building with `--with-thread-sanitizer` and don't use the
suppression file, then running configure will report a thread leak.
Call `pthread_join()` to avoid the thread leak.
files:
M configure
M configure.ac
diff --git a/configure b/configure
index b1faeaf806a9c6..411bc1a23226e7 100755
--- a/configure
+++ b/configure
@@ -18190,6 +18190,7 @@ else case e in #(
if (pthread_attr_init(&attr)) return (-1);
if (pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM)) return (-1);
if (pthread_create(&id, &attr, foo, NULL)) return (-1);
+ if (pthread_join(id, NULL)) return (-1);
return (0);
}
_ACEOF
diff --git a/configure.ac b/configure.ac
index 043ec957f40894..9e63c8f6144c3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4760,6 +4760,7 @@ if test "$posix_threads" = "yes"; then
if (pthread_attr_init(&attr)) return (-1);
if (pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM)) return (-1);
if (pthread_create(&id, &attr, foo, NULL)) return (-1);
+ if (pthread_join(id, NULL)) return (-1);
return (0);
}]])],
[ac_cv_pthread_system_supported=yes],
https://github.com/python/cpython/commit/823b50e1d03767960b1986a7be248ae389…
commit: 823b50e1d03767960b1986a7be248ae389f18d9b
branch: 3.13
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: gpshead <68491+gpshead(a)users.noreply.github.com>
date: 2025-12-30T23:32:08Z
summary:
[3.13] gh-115634: document ProcessPoolExecutor max_tasks_per_child bug (GH-140897) (#143303)
gh-115634: document ProcessPoolExecutor max_tasks_per_child bug (GH-140897)
(cherry picked from commit 04899b8539ab83657a4495203f26b3cb1a6f46dc)
Co-authored-by: Gregory P. Smith <68491+gpshead(a)users.noreply.github.com>
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index bf98bf23f01cc5..0a2fa48f9a3555 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -278,6 +278,11 @@ in a REPL or a lambda should not be expected to work.
default in absence of a *mp_context* parameter. This feature is incompatible
with the "fork" start method.
+ .. note::
+ Bugs have been reported when using the *max_tasks_per_child* feature that
+ can result in the :class:`ProcessPoolExecutor` hanging in some
+ circumstances. Follow its eventual resolution in :gh:`115634`.
+
.. versionchanged:: 3.3
When one of the worker processes terminates abruptly, a
:exc:`~concurrent.futures.process.BrokenProcessPool` error is now raised.
https://github.com/python/cpython/commit/38f23604c19d357d9782eb2c1a740c3296…
commit: 38f23604c19d357d9782eb2c1a740c3296c08890
branch: 3.14
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: gpshead <68491+gpshead(a)users.noreply.github.com>
date: 2025-12-30T23:29:56Z
summary:
[3.14] gh-115634: document ProcessPoolExecutor max_tasks_per_child bug (GH-140897) (#143302)
gh-115634: document ProcessPoolExecutor max_tasks_per_child bug (GH-140897)
(cherry picked from commit 04899b8539ab83657a4495203f26b3cb1a6f46dc)
Co-authored-by: Gregory P. Smith <68491+gpshead(a)users.noreply.github.com>
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index c2e2f7f820f4ef..18d92e8e9959a9 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -379,6 +379,11 @@ in a REPL or a lambda should not be expected to work.
default in absence of a *mp_context* parameter. This feature is incompatible
with the "fork" start method.
+ .. note::
+ Bugs have been reported when using the *max_tasks_per_child* feature that
+ can result in the :class:`ProcessPoolExecutor` hanging in some
+ circumstances. Follow its eventual resolution in :gh:`115634`.
+
.. versionchanged:: 3.3
When one of the worker processes terminates abruptly, a
:exc:`~concurrent.futures.process.BrokenProcessPool` error is now raised.
https://github.com/python/cpython/commit/04899b8539ab83657a4495203f26b3cb1a…
commit: 04899b8539ab83657a4495203f26b3cb1a6f46dc
branch: main
author: Gregory P. Smith <68491+gpshead(a)users.noreply.github.com>
committer: gpshead <68491+gpshead(a)users.noreply.github.com>
date: 2025-12-30T15:24:32-08:00
summary:
gh-115634: document ProcessPoolExecutor max_tasks_per_child bug (GH-140897)
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index c2e2f7f820f4ef..18d92e8e9959a9 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -379,6 +379,11 @@ in a REPL or a lambda should not be expected to work.
default in absence of a *mp_context* parameter. This feature is incompatible
with the "fork" start method.
+ .. note::
+ Bugs have been reported when using the *max_tasks_per_child* feature that
+ can result in the :class:`ProcessPoolExecutor` hanging in some
+ circumstances. Follow its eventual resolution in :gh:`115634`.
+
.. versionchanged:: 3.3
When one of the worker processes terminates abruptly, a
:exc:`~concurrent.futures.process.BrokenProcessPool` error is now raised.