2017-10-16 2 views
1

Ich weiß nicht, warum, aber ich bekomme diesen seltsamen Fehler, wenn ich versuche, die Methode eines gemeinsamen Objekts freigegebenen benutzerdefinierten Klassenobjekt übergeben. Python-Version: 3.6.3Multiprocessing-Manager und benutzerdefinierte Klassen

Code:

from multiprocessing.managers import SyncManager 

class MyManager(SyncManager): pass 
class MyClass: pass 

class Wrapper: 
    def set(self, ent): 
     self.ent = ent 

MyManager.register('MyClass', MyClass) 
MyManager.register('Wrapper', Wrapper) 

if __name__ == '__main__': 
    manager = MyManager() 
    manager.start() 

    try: 
     obj = manager.MyClass() 
     lst = manager.list([1,2,3]) 

     collection = manager.Wrapper() 
     collection.set(lst) # executed fine 
     collection.set(obj) # raises error 
    except Exception as e: 
     raise 

Fehler:

--------------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "D:\Program Files\Python363\lib\multiprocessing\managers.py", line 228, in serve_client 
    request = recv() 
    File "D:\Program Files\Python363\lib\multiprocessing\connection.py", line 251, in recv 
    return _ForkingPickler.loads(buf.getbuffer()) 
    File "D:\Program Files\Python363\lib\multiprocessing\managers.py", line 881, in RebuildProxy 
    return func(token, serializer, incref=incref, **kwds) 
TypeError: AutoProxy() got an unexpected keyword argument 'manager_owned' 
--------------------------------------------------------------------------- 

Was ist das Problem?

Antwort

1

Gefunden vorübergehende Lösung here. Ich habe es geschafft, es zu beheben, indem ich benötigte Schlüsselwort zum Initialisierer von AutoProxy in multiprocessing hinzufügen \ managers.py Obwohl ich nicht weiß, ob dieser Kwarg für irgendetwas verantwortlich ist.

Verwandte Themen