diff options
author | Asheesh Laroia <github@asheesh.org> | 2021-02-08 03:15:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-08 03:15:51 (GMT) |
commit | bf2e7e55d7306b1e2fce7dce767e8df5ff42cf1c (patch) | |
tree | f6372786f3d6ca7add303f58671c44de0f7b34f7 /Lib/concurrent | |
parent | 30a8b2839646c849371c7f8411132571cd8bf17c (diff) | |
download | cpython-bf2e7e55d7306b1e2fce7dce767e8df5ff42cf1c.zip cpython-bf2e7e55d7306b1e2fce7dce767e8df5ff42cf1c.tar.gz cpython-bf2e7e55d7306b1e2fce7dce767e8df5ff42cf1c.tar.bz2 |
bpo-40692: Run more test_concurrent_futures tests (GH-20239)
In the case of multiprocessing.synchronize() being missing, the
test_concurrent_futures test suite now skips only the tests that
require multiprocessing.synchronize().
Validate that multiprocessing.synchronize exists as part of
_check_system_limits(), allowing ProcessPoolExecutor to raise
NotImplementedError during __init__, rather than crashing with
ImportError during __init__ when creating a lock imported from
multiprocessing.synchronize.
Use _check_system_limits() to disable tests of
ProcessPoolExecutor on systems without multiprocessing.synchronize.
Running the test suite without multiprocessing.synchronize reveals
that Lib/compileall.py crashes when it uses a ProcessPoolExecutor.
Therefore, change Lib/compileall.py to call _check_system_limits()
before creating the ProcessPoolExecutor.
Note that both Lib/compileall.py and Lib/test/test_compileall.py
were attempting to sanity-check ProcessPoolExecutor by expecting
ImportError. In multiprocessing.resource_tracker, sem_unlink() is also absent
on platforms where POSIX semaphores aren't available. Avoid using
sem_unlink() if it, too, does not exist.
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
Diffstat (limited to 'Lib/concurrent')
-rw-r--r-- | Lib/concurrent/futures/process.py | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py index 90bc98b..7647198 100644 --- a/Lib/concurrent/futures/process.py +++ b/Lib/concurrent/futures/process.py @@ -533,6 +533,14 @@ def _check_system_limits(): raise NotImplementedError(_system_limited) _system_limits_checked = True try: + import multiprocessing.synchronize + except ImportError: + _system_limited = ( + "This Python build lacks multiprocessing.synchronize, usually due " + "to named semaphores being unavailable on this platform." + ) + raise NotImplementedError(_system_limited) + try: nsems_max = os.sysconf("SC_SEM_NSEMS_MAX") except (AttributeError, ValueError): # sysconf not available or setting not available |