diff options
Diffstat (limited to 'lib/spack/llnl/util/lang.py')
-rw-r--r-- | lib/spack/llnl/util/lang.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/spack/llnl/util/lang.py b/lib/spack/llnl/util/lang.py index e746ce096c..0bcbebba72 100644 --- a/lib/spack/llnl/util/lang.py +++ b/lib/spack/llnl/util/lang.py @@ -5,6 +5,7 @@ from __future__ import division +import multiprocessing import os import re import functools @@ -19,6 +20,23 @@ import sys ignore_modules = [r'^\.#', '~$'] +# On macOS, Python 3.8 multiprocessing now defaults to the 'spawn' start +# method. Spack cannot currently handle this, so force the process to start +# using the 'fork' start method. +# +# TODO: This solution is not ideal, as the 'fork' start method can lead to +# crashes of the subprocess. Figure out how to make 'spawn' work. +# +# See: +# * https://github.com/spack/spack/pull/18124 +# * https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods # noqa: E501 +# * https://bugs.python.org/issue33725 +if sys.version_info >= (3,): # novm + fork_context = multiprocessing.get_context('fork') +else: + fork_context = multiprocessing + + def index_by(objects, *funcs): """Create a hierarchy of dictionaries by splitting the supplied set of objects on unique values of the supplied functions. |