summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-05-28 14:02:50 (GMT)
committerGitHub <noreply@github.com>2019-05-28 14:02:50 (GMT)
commit17a5588740b3d126d546ad1a13bdac4e028e6d50 (patch)
tree9e2045dcf3bf7772b03efabcb118e1d7c47beace
parenta85a1d337d26a65036e427341d15e3979f7e9ced (diff)
downloadcpython-17a5588740b3d126d546ad1a13bdac4e028e6d50.zip
cpython-17a5588740b3d126d546ad1a13bdac4e028e6d50.tar.gz
cpython-17a5588740b3d126d546ad1a13bdac4e028e6d50.tar.bz2
bpo-33725: multiprocessing uses spawn by default on macOS (GH-13603)
On macOS, the multiprocessing module now uses the "spawn" start method by default.
-rw-r--r--Doc/library/multiprocessing.rst7
-rw-r--r--Doc/whatsnew/3.8.rst10
-rw-r--r--Lib/multiprocessing/context.py7
-rw-r--r--Misc/NEWS.d/next/Library/2019-05-28-01-17-42.bpo-33725.fFZoDG.rst2
4 files changed, 24 insertions, 2 deletions
diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst
index cc6dd4e..a4771d3 100644
--- a/Doc/library/multiprocessing.rst
+++ b/Doc/library/multiprocessing.rst
@@ -102,7 +102,7 @@ to start a process. These *start methods* are
will not be inherited. Starting a process using this method is
rather slow compared to using *fork* or *forkserver*.
- Available on Unix and Windows. The default on Windows.
+ Available on Unix and Windows. The default on Windows and macOS.
*fork*
The parent process uses :func:`os.fork` to fork the Python
@@ -124,6 +124,11 @@ to start a process. These *start methods* are
Available on Unix platforms which support passing file descriptors
over Unix pipes.
+.. versionchanged:: 3.8
+
+ On macOS, *spawn* start method is now the default: *fork* start method is no
+ longer reliable on macOS, see :issue:`33725`.
+
.. versionchanged:: 3.4
*spawn* added on all unix platforms, and *forkserver* added for
some unix platforms.
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 860d6cc..547e795 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -469,6 +469,16 @@ access the ``madvise()`` system call.
(Contributed by Zackery Spytz in :issue:`32941`.)
+multiprocessing
+---------------
+
+Added new :mod:`multiprocessing.shared_memory` module.
+(Contributed Davin Potts in :issue:`35813`.)
+
+On macOS, the *spawn* start method is now used by default.
+(Contributed by Victor Stinner in :issue:`33725`.)
+
+
os
--
diff --git a/Lib/multiprocessing/context.py b/Lib/multiprocessing/context.py
index 5a48657..5f8e0f0 100644
--- a/Lib/multiprocessing/context.py
+++ b/Lib/multiprocessing/context.py
@@ -309,7 +309,12 @@ if sys.platform != 'win32':
'spawn': SpawnContext(),
'forkserver': ForkServerContext(),
}
- _default_context = DefaultContext(_concrete_contexts['fork'])
+ if sys.platform == 'darwin':
+ # bpo-33725: running arbitrary code after fork() is no longer reliable
+ # on macOS since macOS 10.14 (Mojave). Use spawn by default instead.
+ _default_context = DefaultContext(_concrete_contexts['spawn'])
+ else:
+ _default_context = DefaultContext(_concrete_contexts['fork'])
else:
diff --git a/Misc/NEWS.d/next/Library/2019-05-28-01-17-42.bpo-33725.fFZoDG.rst b/Misc/NEWS.d/next/Library/2019-05-28-01-17-42.bpo-33725.fFZoDG.rst
new file mode 100644
index 0000000..6f1665f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-05-28-01-17-42.bpo-33725.fFZoDG.rst
@@ -0,0 +1,2 @@
+On macOS, the :mod:`multiprocessing` module now uses *spawn* start method by
+default.