Неподнимаемый объект - совместное использование и создание прокси-объекта
У меня есть класс 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()
Я видел несколько решений, из которых я собрал этот код, но ни одно из них не говорило об ошибке при создании от менеджера. Моя конечная цель - передать внешний объект от дочернего процесса к его родительскому процессу. Есть идеи как обойти это?
Примечание: я не могу вносить изменения во внутренний класс.