mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
issue3770: if SEM_OPEN is 0, disable the mp.synchronize module, rev. Nick Coghlan, Damien Miller
This commit is contained in:
parent
e563aa4383
commit
37040cdace
5 changed files with 37 additions and 0 deletions
|
@ -18,6 +18,13 @@ to this, the :mod:`multiprocessing` module allows the programmer to fully
|
||||||
leverage multiple processors on a given machine. It runs on both Unix and
|
leverage multiple processors on a given machine. It runs on both Unix and
|
||||||
Windows.
|
Windows.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
This package largely requires a functioning shared semaphore
|
||||||
|
implementation on the host operating system to function. Without one, the
|
||||||
|
:mod:`multiprocessing.synchronize` module will be disabled, and attempts to
|
||||||
|
import it will result in an ImportError. See
|
||||||
|
http://bugs.python.org/issue3770 for additional information.
|
||||||
|
|
||||||
The :class:`Process` class
|
The :class:`Process` class
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -21,6 +21,17 @@ from multiprocessing.process import current_process
|
||||||
from multiprocessing.util import Finalize, register_after_fork, debug
|
from multiprocessing.util import Finalize, register_after_fork, debug
|
||||||
from multiprocessing.forking import assert_spawning, Popen
|
from multiprocessing.forking import assert_spawning, Popen
|
||||||
|
|
||||||
|
# Try to import the mp.synchronize module cleanly, if it fails
|
||||||
|
# raise ImportError for platforms lacking a working sem_open implementation.
|
||||||
|
# See issue 3770
|
||||||
|
try:
|
||||||
|
from _multiprocessing import SemLock
|
||||||
|
except (ImportError):
|
||||||
|
raise ImportError("This platform lacks a functioning sem_open" +
|
||||||
|
" implementation, therefore, the required" +
|
||||||
|
" synchronization primitives needed will not" +
|
||||||
|
" function, see issue 3770.")
|
||||||
|
|
||||||
#
|
#
|
||||||
# Constants
|
# Constants
|
||||||
#
|
#
|
||||||
|
|
|
@ -1047,6 +1047,7 @@ _expectations = {
|
||||||
test_tcl
|
test_tcl
|
||||||
test_timeout
|
test_timeout
|
||||||
test_urllibnet
|
test_urllibnet
|
||||||
|
test_multiprocessing
|
||||||
""",
|
""",
|
||||||
'aix5':
|
'aix5':
|
||||||
"""
|
"""
|
||||||
|
@ -1077,6 +1078,7 @@ _expectations = {
|
||||||
test_ossaudiodev
|
test_ossaudiodev
|
||||||
test_pep277
|
test_pep277
|
||||||
test_tcl
|
test_tcl
|
||||||
|
test_multiprocessing
|
||||||
""",
|
""",
|
||||||
'netbsd3':
|
'netbsd3':
|
||||||
"""
|
"""
|
||||||
|
@ -1092,6 +1094,7 @@ _expectations = {
|
||||||
test_ossaudiodev
|
test_ossaudiodev
|
||||||
test_pep277
|
test_pep277
|
||||||
test_tcl
|
test_tcl
|
||||||
|
test_multiprocessing
|
||||||
""",
|
""",
|
||||||
}
|
}
|
||||||
_expectations['freebsd5'] = _expectations['freebsd4']
|
_expectations['freebsd5'] = _expectations['freebsd4']
|
||||||
|
|
|
@ -18,6 +18,14 @@ import socket
|
||||||
import random
|
import random
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
# Work around broken sem_open implementations
|
||||||
|
try:
|
||||||
|
import multiprocessing.synchronize
|
||||||
|
except ImportError, e:
|
||||||
|
from test.test_support import TestSkipped
|
||||||
|
raise TestSkipped(e)
|
||||||
|
|
||||||
import multiprocessing.dummy
|
import multiprocessing.dummy
|
||||||
import multiprocessing.connection
|
import multiprocessing.connection
|
||||||
import multiprocessing.managers
|
import multiprocessing.managers
|
||||||
|
|
8
setup.py
8
setup.py
|
@ -1269,6 +1269,14 @@ class PyBuildExt(build_ext):
|
||||||
)
|
)
|
||||||
libraries = []
|
libraries = []
|
||||||
|
|
||||||
|
elif platform.startswith('openbsd'):
|
||||||
|
macros = dict( # OpenBSD
|
||||||
|
HAVE_SEM_OPEN=0, # Not implemented
|
||||||
|
HAVE_SEM_TIMEDWAIT=0,
|
||||||
|
HAVE_FD_TRANSFER=1,
|
||||||
|
)
|
||||||
|
libraries = []
|
||||||
|
|
||||||
else: # Linux and other unices
|
else: # Linux and other unices
|
||||||
macros = dict(
|
macros = dict(
|
||||||
HAVE_SEM_OPEN=1,
|
HAVE_SEM_OPEN=1,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue