Zugriff auf ein Attribut eines Multiprocessing-Proxys einer Klasse

8

Ich habe eine Klasse, die ich mit Kinderprozessen in einem Pool schreibgeschützt teilen möchte, also habe ich einen Proxy einer Klasse vorbereitet, aber es hat nicht funktioniert. Das folgende ist ein vereinfachtes Beispiel für mein Problem.

%Vor%

Wenn ich diesen Code ausführe, bekomme ich:

%Vor%

Es scheint, dass ich nicht direkt über einen Proxy auf das Attribut eines gemeinsamen Objekts zugreifen kann. Ist der einzige Weg, eine Methode zu verwenden, die das Attribut erhält, oder mache ich etwas falsch?

    
Chan Y. Park 22.10.2014, 02:47
quelle

2 Antworten

11

Die von Proxy und seinen Unterklassen verwendeten multiprocessing.BaseManager -Objekte stellen normalerweise nur Methoden von den Objekten aus, auf die sie sich beziehen, nicht Attribute. Jetzt gibt es multiprocessing.Manager().Namespace , das eine Unterklasse Proxy bereitstellt, die Zugriff auf Attribute statt auf Methoden bereitstellt. Wir können unseren eigenen Proxy -Typ erstellen, der von diesem erbt, der Zugriff auf alle unsere Attribute ermöglicht, sowie den Zugriff auf unsere b -Funktion:

%Vor%

Ausgabe:

%Vor%

Bearbeiten:

Wenn Sie Methoden aus Ihrer ursprünglichen Klasse dynamisch zu einer Proxy-Klasse hinzufügen möchten, können Sie Folgendes tun:

%Vor%     
dano 22.10.2014, 03:42
quelle
0

Hier ist eine weniger wortreiche Alternative, die ich in der Praxis gut fand. Nicht sicher, ob es irgendwelche Nachteile gibt.

%Vor%

Damit können Sie auf a zugreifen, indem Sie proxy_object.get_a()

aufrufen     
siemanko 15.08.2016 01:01
quelle

Tags und Links