Совместное использование объекта класса между процессами с использованием BaseManager - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь разделить объект между двумя процессами, используя BaseManager.

Мой объект класса читается из файла json конфигурации, и мне нужно использовать его для создания объекта и использовать его между двумя процессами.

например, имя класса, которое читается из конфигурацииФайл json 'Event'

from multiprocessing import Process, Manager
from multiprocessing.managers import BaseManager
class Event:
    def __init__(self):
        print('init')
        self.i = None
    def inject(self):
        print(self.i)
        self.i = 100
        print(self.i)
    def restore(self):
        print(self.i)


So, if my class name 'Event' is in evt_class, I am able to register it with BaseManager.
>>> evt_class = Event
>>> BaseManager.register(str(evt_class).split('.')[1], evt_class)
>>> manager = BaseManager()
>>> manager.start()

dir(manager) shows the 'Event' class registered.

>>> dir(manager)
['Event', '_Client', '_Listener', '_Server', '__class__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_address', '_authkey', '_create', '_debug_info', '_finalize_manager', '_number_of_objects', '_process', '_registry', '_run_server', '_serializer', '_state', 'address', 'connect', 'get_server', 'join', 'register', 'shutdown', 'start']
>>> 

But, I am not able to create the 'Event' object using the BaseManager.

>>> c = manager.evt_class()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'BaseManager' object has no attribute 'evt_class'
>>> evt_class
<class __main__.Event at 0x7f0b9f2186d0>
>>> c = manager.str(evt_class).split('.')[1]()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'BaseManager' object has no attribute 'str'

Буду признателен за любую помощь.

...