Python docs of the multiprocessing module state:
Changed in version 3.6: Shared objects are capable of being nested. For example, a shared container object such as a shared list can contain other shared objects which will all be managed and synchronized by the
SyncManager.
This does work with list and dict. However, if I try to create a shared Queue inside a shared dict, I get an error:
>>> from multiprocessing import Manager >>> m = Manager() >>> d = m.dict() >>> d['a'] = m.list() >>> d['b'] = m.dict() >>> d['c'] = m.Queue() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 2, in __setitem__ File "/usr/lib/python3.6/multiprocessing/managers.py", line 772, in _callmethod raise convert_to_error(kind, result) multiprocessing.managers.RemoteError: --------------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python3.6/multiprocessing/managers.py", line 228, in serve_client request = recv() File "/usr/lib/python3.6/multiprocessing/connection.py", line 251, in recv return _ForkingPickler.loads(buf.getbuffer()) File "/usr/lib/python3.6/multiprocessing/managers.py", line 881, in RebuildProxy return func(token, serializer, incref=incref, **kwds) TypeError: AutoProxy() got an unexpected keyword argument 'manager_owned' --------------------------------------------------------------------------- Seems like https://hg.python.org/cpython/rev/39e7307f9aee is the changeset which introduced nested shared objects.