New submission from Vilnis Termanis:

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

----------
components: Library (Lib)
files: manager_pickling.py
messages: 278529
nosy: vilnis.termanis
priority: normal
severity: normal
status: open
title: multiprocessing Manager mutable type member access failure
versions: Python 2.7, Python 3.5
Added file: http://bugs.python.org/file45066/manager_pickling.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28422>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to