2009-01-28 5 views
4

J'utilise Pyro dans un projet et je n'arrive pas à comprendre comment transférer un objet complet sur le fil. L'objet est pas distribué (mes objets distribués fonctionnent parfaitement bien), mais devrait fonctionner comme un argument pour un objet distribué déjà disponible.Transfert d'objet via Pyro

Mon objet est dérivé d'une classe personnalisée contenant des méthodes et des variables - un entier et une liste. La classe est disponible pour le serveur et le client. Lorsque j'utilise mon objet comme argument d'une méthode d'un objet distribué, la variable entière est "reçue" correctement, mais la liste est vide, même si je peux voir qu'elle contient des valeurs juste avant qu'elle ne soit "envoyée".

Pourquoi est-ce?

Version courte de la classe:

class Collection(Pyro.core.ObjBase): 
    num = 0 
    operations = [("Operation:", "Value:", "Description", "Timestamp")] 

def __init__(self): 
    Pyro.core.ObjBase.__init__(self) 

def add(self, val, desc): 
    entry = ("Add", val, desc, strftime("%Y-%m-%d %H:%M:%S")) 
    self.operations.append(entry) 
    self.num = self.num + 1 

def printop(self): 
    print "This collection will execute the following operations:" 
    for item in self.operations: 
     print item 

La méthode receving dans l'objet distribué:

def apply(self, collection): 
    print "Todo: Apply collection" 
    #op = collection.getop() 
    print "Number of collected operations:", collection.a 
    collection.printop() 

Répondre

4

Operations est un attribut de classe, pas l'attribut d'objet. C'est pourquoi ce n'est pas transféré. Essayez de le définir en __init__ via self.operations = <whatever>.

1

Votre méthode de réception, s'applique, a le même nom que la fonction Python intégrée.

Questions connexes