From 0b3d1384f7f5dc6d79861c888453eeed60d6681a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon-Martin=20Schr=C3=B6der?= Date: Thu, 13 Aug 2020 23:07:11 +0200 Subject: [PATCH 1/8] Introduce daemon parameter to DummyProcess Introduce daemon parameter to multiprocessing.dummy.DummyProcess in order to match the API of multiprocessing. --- Lib/multiprocessing/dummy/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/multiprocessing/dummy/__init__.py b/Lib/multiprocessing/dummy/__init__.py index 7dc5d1c8dde848..9fd85f0e6410cd 100644 --- a/Lib/multiprocessing/dummy/__init__.py +++ b/Lib/multiprocessing/dummy/__init__.py @@ -33,8 +33,8 @@ 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 From 9ccb81236563ade902254210d4a6c61a95b26962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon-Martin=20Schr=C3=B6der?= Date: Sun, 7 Nov 2021 08:53:30 +0100 Subject: [PATCH 2/8] Add test_multiprocessing_dummy --- Lib/test/test_multiprocessing_dummy.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Lib/test/test_multiprocessing_dummy.py diff --git a/Lib/test/test_multiprocessing_dummy.py b/Lib/test/test_multiprocessing_dummy.py new file mode 100644 index 00000000000000..780ae24cf0172a --- /dev/null +++ b/Lib/test/test_multiprocessing_dummy.py @@ -0,0 +1,12 @@ +import unittest +import test._test_multiprocessing + +from test import support + +if support.PGO: + raise unittest.SkipTest("test is not helpful for PGO") + +test._test_multiprocessing.install_tests_in_module_dict(globals(), 'dummy') + +if __name__ == '__main__': + unittest.main() From 28796b49bf37813eb3ab7cc92b5a3e4a22c07371 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Sun, 7 Nov 2021 07:58:36 +0000 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst diff --git a/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst b/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst new file mode 100644 index 00000000000000..6668a0d2c786fe --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst @@ -0,0 +1 @@ +Introduce daemon parameter to multiprocessing.dummy.DummyProcess in order to match the API of multiprocessing.Process. \ No newline at end of file From 8b496be106cc5eb099f43249614230bf373a1462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon-Martin=20Schr=C3=B6der?= Date: Sun, 7 Nov 2021 09:21:23 +0100 Subject: [PATCH 4/8] Rename NEWS file --- ...-41544._0dD3w.rst => 2021-11-07-07-58-35.bpo-41544._0dD3w.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Misc/NEWS.d/next/Library/{2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst => 2021-11-07-07-58-35.bpo-41544._0dD3w.rst} (100%) diff --git a/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst b/Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-41544._0dD3w.rst similarity index 100% rename from Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-bpo-41544._0dD3w.rst rename to Misc/NEWS.d/next/Library/2021-11-07-07-58-35.bpo-41544._0dD3w.rst From 06a732b21ce500c22b45a8b40cc4c0ff4ba6c6e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon-Martin=20Schr=C3=B6der?= Date: Sun, 7 Nov 2021 09:58:59 +0100 Subject: [PATCH 5/8] TestMultiprocessingDummy: Just check the signatures. --- Lib/test/test_multiprocessing_dummy.py | 27 +++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_multiprocessing_dummy.py b/Lib/test/test_multiprocessing_dummy.py index 780ae24cf0172a..b795c5b7f13310 100644 --- a/Lib/test/test_multiprocessing_dummy.py +++ b/Lib/test/test_multiprocessing_dummy.py @@ -1,12 +1,29 @@ +import inspect +import multiprocessing import unittest -import test._test_multiprocessing +from multiprocessing import dummy -from test import support -if support.PGO: - raise unittest.SkipTest("test is not helpful for PGO") +class TestMultiprocessingDummy(unittest.TestCase): + def test_signatures(self): + """Check that the signatures in multiprocessing.dummy match these of multiprocessing.""" -test._test_multiprocessing.install_tests_in_module_dict(globals(), 'dummy') + 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() From c261a7c0fdf9425cda3fc025458f4f1f754e68c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon-Martin=20Schr=C3=B6der?= Date: Sun, 7 Nov 2021 09:59:37 +0100 Subject: [PATCH 6/8] dummy.Pool: Add maxtasksperchild parameter --- Lib/multiprocessing/dummy/__init__.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Lib/multiprocessing/dummy/__init__.py b/Lib/multiprocessing/dummy/__init__.py index 9fd85f0e6410cd..cfb8bb3b3c3da5 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 @@ -119,7 +120,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) From cd5312c652bda90bce1314ca9256552b8293781b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon-Martin=20Schr=C3=B6der?= Date: Thu, 2 Dec 2021 20:35:47 +0100 Subject: [PATCH 7/8] Update 2021-11-07-07-58-35.bpo-41544._0dD3w.rst --- .../next/Library/2021-11-07-07-58-35.bpo-41544._0dD3w.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 6668a0d2c786fe..f85235d38bb5e3 100644 --- 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 @@ -1 +1 @@ -Introduce daemon parameter to multiprocessing.dummy.DummyProcess in order to match the API of multiprocessing.Process. \ No newline at end of file +Add missing parameters to multiprocessing.dummy.DummyProcess and multiprocessing.dummy.Pool in order to match the API of multiprocessing. From caf7d09205b1ab1180a2848d0f9ce5da830d7014 Mon Sep 17 00:00:00 2001 From: Martin Schroeder Date: Mon, 20 Apr 2026 15:08:56 +0200 Subject: [PATCH 8/8] Fix DummyProcess signature --- Lib/multiprocessing/dummy/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/multiprocessing/dummy/__init__.py b/Lib/multiprocessing/dummy/__init__.py index cfb8bb3b3c3da5..0e9ed4adb87c0f 100644 --- a/Lib/multiprocessing/dummy/__init__.py +++ b/Lib/multiprocessing/dummy/__init__.py @@ -34,7 +34,8 @@ class DummyProcess(threading.Thread): - def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, daemon=None): + 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()