@haDDah

Как в python передавать сложные объекты между процессами?

Имеется такая задача:
Нужно создавать и заполнять некую иерархию классов, в разных процессах(для ускорения) и возвращать в главный процесс.
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 день)
  • Вопрос задан
  • 459 просмотров
Пригласить эксперта
Ответы на вопрос 2
@rPman
Не создавай себе проблему, используй потоки а не процессы.

Шарить данные в пределах одного процесса значительно проще чем пытаться это делать между процессами, не только с точки зрения логики и кода но и организации.

p.s. питон и скорость? не могут эти два слова рядом стоять... а уж если нужно shared memory использовать и подавно, нефиг искать себе геморой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы