Имеется такая задача:
Нужно создавать и заполнять некую иерархию классов, в разных процессах(для ускорения) и возвращать в главный процесс.
import multiprocessing
import multiprocessing.managers
class ChildClass:
name = "child name"
def __init__(self):
pass
class ParentClass:
name = "parent name"
child_class = []
def __init__(self):
num_of_childs = 3
for i in range(num_of_childs):
self.child_class.append(ChildClass())
def func(shared_array):
shared_array.append(ParentClass())
if __name__ == '__main__':
mngr = multiprocessing.Manager()
shared_array = mngr.list()
num_iterations = 3
processes = []
for i in range(3):
processes.append(multiprocessing.Process(target=func, args=(shared_array,)))
for process in processes:
process.start()
for process in processes:
process.join()
for obj in shared_array:
print(obj.name)
print(obj.child_class)
Результат:
parent name
[]
parent name
[]
parent name
[]
Проблема - массив объектов ChildClass пустой.
На деле иерархия классов куда больше и каждый класс может иметь много массивов, содержащих других классов по иерархии.
Я так понимаю, что проблема в том, что я создаю класс в другом процессе и не могу его прочитать в главном.
Погуглив я пробовал использовать multiprocessing.managers.BaseManager, для регистрации своего класса, но проблема в том, что создание этого BaseManager не быстрый процесс и при количестве объектов 1000+ без распараллеливания программа работает быстрее...
Использовать либку multiprocessing необязательно, приму любые идеи на любых либках.
Заранее всем спасибо, а то мучаюсь уже не 1 день)