diff --git a/Lib/multiprocessing/dummy/__init__.py b/Lib/multiprocessing/dummy/__init__.py index 7dc5d1c8dde848..0e9ed4adb87c0f 100644 --- a/Lib/multiprocessing/dummy/__init__.py +++ b/Lib/multiprocessing/dummy/__init__.py @@ -17,10 +17,11 @@ # Imports # -import threading +import array import sys +import threading import weakref -import array +import warnings from .connection import Pipe from threading import Lock, RLock, Semaphore, BoundedSemaphore @@ -33,8 +34,9 @@ class DummyProcess(threading.Thread): - def __init__(self, group=None, target=None, name=None, args=(), kwargs=None): - threading.Thread.__init__(self, group, target, name, args, kwargs) + def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, + *, daemon=None): + threading.Thread.__init__(self, group, target, name, args, kwargs, daemon=daemon) self._pid = None self._children = weakref.WeakKeyDictionary() self._start_called = False @@ -119,7 +121,10 @@ def Manager(): def shutdown(): pass -def Pool(processes=None, initializer=None, initargs=()): +def Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None): + if maxtasksperchild is not None: + warnings.warn("maxtasksperchild makes no sense for a ThreadPool and is ignored") + from ..pool import ThreadPool return ThreadPool(processes, initializer, initargs) diff --git a/Lib/test/test_multiprocessing_dummy.py b/Lib/test/test_multiprocessing_dummy.py new file mode 100644 index 00000000000000..b795c5b7f13310 --- /dev/null +++ b/Lib/test/test_multiprocessing_dummy.py @@ -0,0 +1,29 @@ +import inspect +import multiprocessing +import unittest +from multiprocessing import dummy + + +class TestMultiprocessingDummy(unittest.TestCase): + def test_signatures(self): + """Check that the signatures in multiprocessing.dummy match these of multiprocessing.""" + + common = set(dummy.__all__) & set(multiprocessing.__all__) + + # Skip Locks (these have no parameters anyway) + common.remove("Lock") + common.remove("RLock") + + for name in common: + print(name) + + dummy_obj = getattr(dummy, name) + multiprocessing_obj = getattr(multiprocessing, name) + + dummy_sig = inspect.signature(dummy_obj) + multiprocessing_sig = inspect.signature(multiprocessing_obj) + + assert dummy_sig == multiprocessing_sig, f"{name}: {dummy_sig} != {multiprocessing_sig}" + +if __name__ == '__main__': + unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-41544._0dD3w.rst b/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-41544._0dD3w.rst new file mode 100644 index 00000000000000..f85235d38bb5e3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-41544._0dD3w.rst @@ -0,0 +1 @@ +Add missing parameters to multiprocessing.dummy.DummyProcess and multiprocessing.dummy.Pool in order to match the API of multiprocessing.