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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...