Issue #28485: Check for negative workers even without ProcessPoolExecutor
This matches the documentation, and passes the test suite when multithreading
is disabled.
diff --git a/Lib/compileall.py b/Lib/compileall.py
index 0cc0c1d..2d4c523 100644
--- a/Lib/compileall.py
+++ b/Lib/compileall.py
@@ -66,13 +66,13 @@
optimize: optimization level or -1 for level of the interpreter
workers: maximum number of parallel workers
"""
+ if workers is not None and workers < 0:
+ raise ValueError('workers must be greater or equal to 0')
+
files = _walk_dir(dir, quiet=quiet, maxlevels=maxlevels,
ddir=ddir)
success = 1
if workers is not None and workers != 1 and ProcessPoolExecutor is not None:
- if workers < 0:
- raise ValueError('workers must be greater or equal to 0')
-
workers = workers or None
with ProcessPoolExecutor(max_workers=workers) as executor:
results = executor.map(partial(compile_file,
diff --git a/Misc/NEWS b/Misc/NEWS
index 3e2b34f..c66a521 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -113,6 +113,10 @@
Library
-------
+- Issue #28485: Always raise ValueError for negative
+ compileall.compile_dir(workers=...) parameter, even when multithreading is
+ unavailable.
+
- Issue #28387: Fixed possible crash in _io.TextIOWrapper deallocator when
the garbage collector is invoked in other thread. Based on patch by
Sebastian Cufre.