From 803b4094db238b3ac7f82d0983f6c9a3910e6e4e Mon Sep 17 00:00:00 2001 From: Benjamin Gilbert Date: Sun, 27 Oct 2024 13:39:08 -0700 Subject: [PATCH 1/2] mypy: unconditionally ignore os.add_dll_directory() If OpenSlide Python is type-checked on Windows, os.add_dll_directory() will exist and mypy will complain. Add an extra ignore to fix this. Mypy understands conditionalizing on sys.platform but not on os.name, and we want the latter because it exactly corresponds to whether the function exists. Signed-off-by: Benjamin Gilbert --- examples/deepzoom/deepzoom_multiserver.py | 2 +- examples/deepzoom/deepzoom_server.py | 2 +- examples/deepzoom/deepzoom_tile.py | 2 +- tests/common.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/deepzoom/deepzoom_multiserver.py b/examples/deepzoom/deepzoom_multiserver.py index 46f51743..8142b6fe 100755 --- a/examples/deepzoom/deepzoom_multiserver.py +++ b/examples/deepzoom/deepzoom_multiserver.py @@ -42,7 +42,7 @@ if os.name == 'nt': _dll_path = os.getenv('OPENSLIDE_PATH') if _dll_path is not None: - with os.add_dll_directory(_dll_path): # type: ignore[attr-defined] + with os.add_dll_directory(_dll_path): # type: ignore[attr-defined,unused-ignore] # noqa: E501 import openslide else: import openslide diff --git a/examples/deepzoom/deepzoom_server.py b/examples/deepzoom/deepzoom_server.py index f57579e9..fb9efbf1 100755 --- a/examples/deepzoom/deepzoom_server.py +++ b/examples/deepzoom/deepzoom_server.py @@ -42,7 +42,7 @@ if os.name == 'nt': _dll_path = os.getenv('OPENSLIDE_PATH') if _dll_path is not None: - with os.add_dll_directory(_dll_path): # type: ignore[attr-defined] + with os.add_dll_directory(_dll_path): # type: ignore[attr-defined,unused-ignore] # noqa: E501 import openslide else: import openslide diff --git a/examples/deepzoom/deepzoom_tile.py b/examples/deepzoom/deepzoom_tile.py index 05e4d9a7..614b032c 100755 --- a/examples/deepzoom/deepzoom_tile.py +++ b/examples/deepzoom/deepzoom_tile.py @@ -48,7 +48,7 @@ if os.name == 'nt': _dll_path = os.getenv('OPENSLIDE_PATH') if _dll_path is not None: - with os.add_dll_directory(_dll_path): # type: ignore[attr-defined] + with os.add_dll_directory(_dll_path): # type: ignore[attr-defined,unused-ignore] # noqa: E501 import openslide else: import openslide diff --git a/tests/common.py b/tests/common.py index 28bc8bfb..ca034195 100644 --- a/tests/common.py +++ b/tests/common.py @@ -30,7 +30,7 @@ # environment. _dll_path = os.getenv('OPENSLIDE_PATH') if _dll_path is not None: - with os.add_dll_directory(_dll_path): # type: ignore[attr-defined] + with os.add_dll_directory(_dll_path): # type: ignore[attr-defined,unused-ignore] # noqa: E501 import openslide # noqa: F401 module-imported-but-unused From 72300fec838da313948c71a3ec7d1ec6873d0473 Mon Sep 17 00:00:00 2001 From: Benjamin Gilbert Date: Sun, 27 Oct 2024 13:21:19 -0700 Subject: [PATCH 2/2] examples/deepzoom: parallelize deepzoom_tile to available CPUs On Python 3.13+, and on all Python versions on Linux, set the default job count to the number of available CPUs. Otherwise, default to 4 jobs as before. Signed-off-by: Benjamin Gilbert --- examples/deepzoom/deepzoom_tile.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/examples/deepzoom/deepzoom_tile.py b/examples/deepzoom/deepzoom_tile.py index 614b032c..6f52324d 100755 --- a/examples/deepzoom/deepzoom_tile.py +++ b/examples/deepzoom/deepzoom_tile.py @@ -382,6 +382,19 @@ def _shutdown(self) -> None: if __name__ == '__main__': + try: + # Python 3.13+ + available_cpus = os.process_cpu_count() # type: ignore[attr-defined] + except AttributeError: + try: + # Linux + available_cpus = len( + os.sched_getaffinity(0) # type: ignore[attr-defined,unused-ignore] + ) + except AttributeError: + # default + available_cpus = 4 + parser = ArgumentParser(usage='%(prog)s [options] ') parser.add_argument( '-B', @@ -433,8 +446,8 @@ def _shutdown(self) -> None: metavar='COUNT', dest='workers', type=int, - default=4, - help='number of worker processes to start [4]', + default=available_cpus, + help=f'number of worker processes to start [{available_cpus}]', ) parser.add_argument( '-o',