Open
Description
Bug report
When a proxy derived from multiprocessing.managers.BaseProxy
is passed between processes, the self._manager
attribute becomes None
. self._manager
is however accessed to retrieve its _registry
attribute, which contain the method_to_typeid
map recorded into the manager viaBaseManager.register()
, causing an AttributeError
. The solution is to decouple the role of the manager from the role of the registry and propagate the registry separately. I'll submit a pull request to fix this.
Minimal failing example
test.py
from multiprocessing import Process
from multiprocessing.managers import BaseProxy, BaseManager
class Parent(object):
def __init__(self, *args, **kwargs):
pass
def make_child(self):
return Parent()
class MyManager(BaseManager):
pass
def child_generator(parent):
parent.make_child()
if __name__ == "__main__":
MyManager.register('Parent', callable=Parent,
method_to_typeid={'make_child': 'Parent'})
with MyManager() as manager:
parent = manager.Parent()
process = Process(target=child_generator, args=(parent, ))
process.start()
process.join()
Output
❯ python3 test.py
Process Process-2:
Traceback (most recent call last):
File "/usr/local/Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
self.run()
File "/usr/local/Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 18, in child_generator
parent.make_child()
File "<string>", line 2, in make_child
File "/usr/local/Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/managers.py", line 824, in _callmethod
proxytype = self._manager._registry[token.typeid][-1]
AttributeError: 'NoneType' object has no attribute '_registry'
Environment
- CPython versions tested on: 3.6, 3.7, 3.8, 3.9, 3.10
- Operating system and architecture: macOS Monterey 12.6
Linked PRs
Metadata
Metadata
Assignees
Labels
Projects
Status
In Progress