mutiprocessing, manager, list & threading ?

mika.saari at wipsl.com mika.saari at wipsl.com
Tue Dec 28 04:38:08 EST 2010


Hi,

  Testing if I could be able to use multiprocessing BaseManager to manage
list of instance pointers between processes. If my intance inherits
Thread, I get pickling error about _thread.lock.

  I found  Steven Bethard's recipe for this kind of problem in
http://bytes.com/topic/python/answers/552476-why-cant-you-pickle-instancemethods,
but I do not to get the idea how to copyreg the _thread.lock.

  Is it even possible to save instance pointer to list which is
synchronized between separate processes ?

  Thanks a lot,
    -Mika


Client side code:

from multiprocessing.managers import BaseManager
from threading import Thread, Lock

class ListManager(BaseManager):
        pass

class Testing(Thread):
        def __init__(self):
                Thread.__init__(self)

        def nothing(self):
                print("Nothing")

ListManager.register('get_list')
ListManager.register('Testing',Testing)
m = ListManager(address=('', 50000), authkey=b'abc')
m.connect()

list1 = m.get_list()
test = Testing()
print("TEST:",test)
list1.append(test)
print("TEST:",test)


Error:
-----------------------------------------------------------------------
Traceback (most recent call last):
  File "mpclit.py", line 23, in <module>
    list1.append(test)
  File "<string>", line 2, in append
  File "/usr/local/lib/python3.1/multiprocessing/managers.py", line 735,
in _callmethod

    conn.send((self._id, methodname, args, kwds))
  File "/usr/local/lib/python3.1/pickle.py", line 1358, in dumps
    Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <built-in method release of
_thread.lock object at 0x1af710f0>: attribute lookup __main__.release
failed


References:
----------------------------------------------------------------------
http://bytes.com/topic/python/answers/552476-why-cant-you-pickle-instancemethods




More information about the Python-list mailing list