Ajouter des objets à une liste multiprocessing.Manager.list()
Bonjour,
J'essaie de m'initier à la programmation multithreads, mais je me heurte à un problème pour partager une liste d'objets entre plusieurs threads.
J'ai lu dans la documentation qu'on pouvait utiliser un Manager pour contenir des objets qui pourront être manipulés par plusieurs processus.
http://docs.python.org/library/multi...ween-processes
Quand je crée une liste avec Manager.list(), et que j'y insère des entiers, tout se passe bien (comme dans l'exemple donné dans la doc).
Mais quand la liste contient des instances d'une classe que j'ai écrite, ça ne marche pas.
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| from multiprocessing import Process, Manager
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
m = Manager()
l = m.list()
x = Complex(3.0, -4.5)
l.append(x) |
J'obtiens :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2, in append
File "/usr/lib/python2.6/multiprocessing/managers.py", line 740, in _callmethod
raise convert_to_error(kind, result)
multiprocessing.managers.RemoteError:
---------------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/managers.py", line 214, in serve_client
request = recv()
AttributeError: 'module' object has no attribute 'Complex'
--------------------------------------------------------------------------- |
Je ne comprends pas cette erreur, et vous ?
Est-ce que cela veut dire qu'on ne peut pas utiliser d'objets dans une liste gérée par un multiprocessing.Manager ?
Une telle limitation m'étonnerait...