Multiclass-interface 1.0__tar.gz → 1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {Multiclass_interface-1.0 → Multiclass_interface-1.1/Multiclass_interface.egg-info}/PKG-INFO +1 -1
- {Multiclass_interface-1.0/Multiclass_interface.egg-info → Multiclass_interface-1.1}/PKG-INFO +1 -1
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/multiprocess_interface.py +9 -4
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/test_multiprocessinterface.py +4 -3
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/version.py +2 -2
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/.gitignore +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/.gitlab-ci.yml +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/LICENSE +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/SOURCES.txt +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/dependency_links.txt +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/requires.txt +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/top_level.txt +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/README.md +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/__init__.py +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/mpi_interface.py +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/multi_object_list.py +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/__init__.py +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/my_test_cls.py +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/test_mpi.py +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/test_multiclass_list.py +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/pyproject.toml +0 -0
- {Multiclass_interface-1.0 → Multiclass_interface-1.1}/setup.cfg +0 -0
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/multiprocess_interface.py
RENAMED
|
@@ -48,8 +48,9 @@ def run(cls, inputQueue, outputQueue, cls_args, **kwargs):
|
|
|
48
48
|
class ProcessClass():
|
|
49
49
|
cls = None
|
|
50
50
|
|
|
51
|
-
def __init__(self, cls, cls_attrs={}):
|
|
51
|
+
def __init__(self, cls, cls_attrs={}, index=""):
|
|
52
52
|
self.cls_attrs = cls_attrs
|
|
53
|
+
self.index = index
|
|
53
54
|
self.cls = cls
|
|
54
55
|
self.ctx = multiprocessing.get_context('spawn')
|
|
55
56
|
self.inputQueue = self.ctx.Queue()
|
|
@@ -103,7 +104,7 @@ class ProcessClass():
|
|
|
103
104
|
return self.get_result(raise_exception=True, cmd=lambda: f"checking if '{name}' is callable")
|
|
104
105
|
|
|
105
106
|
def __setattr__(self, name, value):
|
|
106
|
-
if name in {'cls', 'ctx', 'inputQueue', 'outputQueue', 'closed', 'process', 'cls_attrs'}:
|
|
107
|
+
if name in {'cls', 'ctx', 'inputQueue', 'outputQueue', 'closed', 'process', 'cls_attrs', 'index'}:
|
|
107
108
|
return object.__setattr__(self, name, value)
|
|
108
109
|
else:
|
|
109
110
|
self.inputQueue.put(('setattr', (name, value), {}))
|
|
@@ -124,7 +125,10 @@ class ProcessClass():
|
|
|
124
125
|
else:
|
|
125
126
|
if hasattr(cmd, '__call__'):
|
|
126
127
|
cmd = cmd()
|
|
127
|
-
|
|
128
|
+
p_id = f'{self.cls.__name__} process'
|
|
129
|
+
if self.index:
|
|
130
|
+
p_id += f" index {self.index}"
|
|
131
|
+
e = Exception(f'{p_id} died before or while {cmd}')
|
|
128
132
|
if raise_exception:
|
|
129
133
|
raise e
|
|
130
134
|
return e
|
|
@@ -153,7 +157,8 @@ class ThreadClass(ProcessClass):
|
|
|
153
157
|
class MultiProcessClassInterface(MultiObjectList):
|
|
154
158
|
|
|
155
159
|
def __init__(self, cls, args_lst, cls_attrs={}):
|
|
156
|
-
MultiObjectList.__init__(self, [ProcessClass(cls, cls_attrs)(*args)
|
|
160
|
+
MultiObjectList.__init__(self, [ProcessClass(cls, cls_attrs, i)(*args)
|
|
161
|
+
for i, args in enumerate(args_lst)], SubsetProcessWrapper)
|
|
157
162
|
|
|
158
163
|
def __getattr__(self, name):
|
|
159
164
|
obj_lst = self.obj_lst
|
|
@@ -79,11 +79,12 @@ def test_subset(mpri):
|
|
|
79
79
|
mpri[1].close()
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
@pytest.mark.parametrize('index,s', [('', ''), (5, ' index 5')])
|
|
83
|
+
def test_dying_process(index, s):
|
|
84
|
+
pri = ProcessClass(MyTest, index=index)(1)
|
|
84
85
|
|
|
85
86
|
def run():
|
|
86
|
-
with pytest.raises(Exception, match="MyTest process died before or while checking if 'work' is callable"):
|
|
87
|
+
with pytest.raises(Exception, match=f"MyTest process{s} died before or while checking if 'work' is callable"):
|
|
87
88
|
pri.work(5)
|
|
88
89
|
t = Thread(target=run)
|
|
89
90
|
t.start()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/requires.txt
RENAMED
|
File without changes
|
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/Multiclass_interface.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/multi_object_list.py
RENAMED
|
File without changes
|
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/__init__.py
RENAMED
|
File without changes
|
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/my_test_cls.py
RENAMED
|
File without changes
|
{Multiclass_interface-1.0 → Multiclass_interface-1.1}/multiclass_interface/tests/test_mpi.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|