diff --git a/pympipool/shared/executorbase.py b/pympipool/shared/executorbase.py index 9a718e30..9ed8bebd 100644 --- a/pympipool/shared/executorbase.py +++ b/pympipool/shared/executorbase.py @@ -18,6 +18,22 @@ def __init__(self): self._future_queue = queue.Queue() self._process = None + @property + def info(self): + if self._process is not None and isinstance(self._process, list): + meta_data_dict = self._process[0]._kwargs.copy() + if "future_queue" in meta_data_dict.keys(): + del meta_data_dict["future_queue"] + meta_data_dict["max_workers"] = len(self._process) + return meta_data_dict + elif self._process is not None: + meta_data_dict = self._process._kwargs.copy() + if "future_queue" in meta_data_dict.keys(): + del meta_data_dict["future_queue"] + return meta_data_dict + else: + return None + @property def future_queue(self): return self._future_queue diff --git a/tests/test_worker.py b/tests/test_worker.py index 154d511a..68cf497c 100644 --- a/tests/test_worker.py +++ b/tests/test_worker.py @@ -4,7 +4,8 @@ from time import sleep from concurrent.futures import CancelledError from pympipool.mpi.executor import PyMPIExecutor, MpiExecInterface -from pympipool.shared.executorbase import cloudpickle_register, execute_parallel_tasks +from pympipool.shared.executorbase import cloudpickle_register, execute_parallel_tasks, ExecutorBase +from pympipool.shell import ShellExecutor from concurrent.futures import Future @@ -78,6 +79,27 @@ def test_executor_exception_future(self): fs = p.submit(raise_error) fs.result() + def test_meta(self): + meta_data_exe_dict = { + 'cores': 2, + 'interface_class': "", + 'hostname_localhost': True, + 'init_function': None, + 'cwd': None, + 'oversubscribe': False, + 'max_workers': 1 + } + with PyMPIExecutor(max_workers=1, cores_per_worker=2, hostname_localhost=True) as exe: + for k, v in meta_data_exe_dict.items(): + if k != 'interface_class': + self.assertEqual(exe.info[k], v) + else: + self.assertEqual(str(exe.info[k]), v) + with ExecutorBase() as exe: + self.assertIsNone(exe.info) + with ShellExecutor(["sleep"]) as exe: + self.assertEqual(exe.info, {}) + def test_pool_multi_core(self): with PyMPIExecutor(max_workers=1, cores_per_worker=2, hostname_localhost=True) as p: output = p.submit(mpi_funct, i=2)