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?
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:
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%Tags und Links python multiprocessing