Kaydet (Commit) 37040cda authored tarafından Jesse Noller's avatar Jesse Noller

issue3770: if SEM_OPEN is 0, disable the mp.synchronize module, rev. Nick Coghlan, Damien Miller

üst e563aa43
...@@ -18,6 +18,13 @@ to this, the :mod:`multiprocessing` module allows the programmer to fully ...@@ -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 ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 ...@@ -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
......
...@@ -1269,6 +1269,14 @@ class PyBuildExt(build_ext): ...@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment