This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: multiprocessing Manager mutable type member access failure
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.8, Python 3.5, Python 2.7
process
Status: closed Resolution: works for me
Dependencies: Superseder:
Assigned To: Nosy List: davin, iritkatriel, vilnis.termanis
Priority: normal Keywords:

Created on 2016-10-12 13:03 by vilnis.termanis, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
manager_pickling.py vilnis.termanis, 2016-10-12 13:03 Script demonstrating problem
Messages (6)
msg278529 - (view) Author: Vilnis Termanis (vilnis.termanis) * Date: 2016-10-12 13:03
Accessing some Manager types (e.g. Lock) through a list, dict or Namespace proxy is not possible if both the mutable container (e.g. list) and contained type instance (e.g. Lock) have been created in the same process.

Symptoms:

In accessing process:
multiprocessing.managers.RemoteError on access, e.g.:
Unserializable message: ('#RETURN', <thread.lock object at 0x7fcf40d31370>)

.. and in underlying manager:
_pickle.PicklingError: Can't pickle <class '_thread.lock'>: attribute lookup lock on _thread failed

The provided test script performs:
0) Initialise SyncManager (via multiprocessing.Manager())
1) Create list proxy through manager
2) Insert another proxied type into the list (e.g. Lock)
3) Try to access type instance from (2) via container created in (1)

Note: When step (2) is run in a child process, everything work as expected. When all steps execute in the same process, one gets the aforementioned exception.


See also:
https://mail.python.org/pipermail/python-list/2009-September/552988.html
msg407085 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021-11-26 19:06
I don't get any errors from the attached script. Is there still a problem here?
msg407090 - (view) Author: Vilnis Termanis (vilnis.termanis) * Date: 2021-11-26 20:49
If you un-comment the print_exc() call, you'll see that it still fails - for queue.Queue:

Manager failure (for Queue)
Traceback (most recent call last):
  File "fish.py", line 74, in main
    add_type_in_own_process(mgr, type_name)
  File "fish.py", line 61, in add_type_in_own_process
    use_manager(obj, type_name, mgr=mgr)
  File "fish.py", line 35, in use_manager
    obj.append(getattr(mgr, type_name)())
  File "<string>", line 2, in append
  File "/usr/lib/python3.8/multiprocessing/managers.py", line 850, in _callmethod
    raise convert_to_error(kind, result)
multiprocessing.managers.RemoteError: 
---------------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.8/multiprocessing/managers.py", line 243, in serve_client
    request = recv()
  File "/usr/lib/python3.8/multiprocessing/connection.py", line 251, in recv
    return _ForkingPickler.loads(buf.getbuffer())
  File "/usr/lib/python3.8/multiprocessing/managers.py", line 959, in RebuildProxy
    return func(token, serializer, incref=incref, **kwds)
TypeError: AutoProxy() got an unexpected keyword argument 'manager_owned'
---------------------------------------------------------------------------
msg407091 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021-11-26 20:52
Version 3.8 is in security fix only mode. Is this a problem on newer versions?
msg407092 - (view) Author: Vilnis Termanis (vilnis.termanis) * Date: 2021-11-26 20:55
Apologies, my mistake - it does indeed work with 3.9 & 3.10. Feel free to close.
msg407093 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021-11-26 20:55
Thank you.
History
Date User Action Args
2022-04-11 14:58:38adminsetgithub: 72608
2021-11-26 20:55:53iritkatrielsetstatus: pending -> closed

messages: + msg407093
stage: resolved
2021-11-26 20:55:07vilnis.termanissetstatus: open -> pending
resolution: works for me
messages: + msg407092

versions: + Python 3.8
2021-11-26 20:52:00iritkatrielsetmessages: + msg407091
2021-11-26 20:49:43vilnis.termanissetstatus: pending -> open
resolution: works for me -> (no value)
messages: + msg407090
2021-11-26 19:06:12iritkatrielsetstatus: open -> pending

nosy: + iritkatriel
messages: + msg407085

resolution: works for me
2016-10-13 21:46:41ned.deilysetnosy: + davin
2016-10-12 13:05:06vilnis.termanissettype: crash -> behavior
2016-10-12 13:04:47vilnis.termanissettype: crash
2016-10-12 13:03:47vilnis.termaniscreate