Неподнимаемый объект - совместное использование и создание прокси-объекта

У меня есть класс Inner, который не может быть засолен, и класс Outer, который содержит экземпляр Inner, которым я хочу поделиться между процессами через канал или очередь. Я не смог этого сделать из-за класса Inner, поэтому я попытался создать прокси-объект из BaseManager, которым я бы поделился вместо Inner.

Я попытался следующий код, но теперь я получаю ошибку травления при попытке получить прокси-объект от менеджера.

from multiprocessing import Queue, Process, managers.BaseManager

class MyManager(BaseManager):
    pass

MyManager.register('Outer', Outer, exposed=['foo'])

class Project:
   def __init__():
      self._manager = MyManager()
      self._manager.start()
      self._queue = Queue()
      self._ready = False

    def validate():
        while True:
            if self._ready:
                outer_manager = self._queue.get()
                break

    def worker():
        outer_proxy = self._manager.Outer() #PicklingError: Can't pickle <class Inner>
        self._queue.put(outer_proxy)
        self._ready = True

def main():
    project = Project()

Я видел несколько решений, из которых я собрал этот код, но ни одно из них не говорило об ошибке при создании от менеджера. Моя конечная цель - передать внешний объект от дочернего процесса к его родительскому процессу. Есть идеи как обойти это?

Примечание: я не могу вносить изменения во внутренний класс.

0 ответов

Другие вопросы по тегам