die folgende Situation vor:die Elemente identifizieren durch verschiedene Prozesse zurück
class A:
def __init__(self):
self.b_list = []
def add_element(b)
self.b_list.append(b)
class B:
def __init__(self,x):
self.x = x
class C:
def __init__(self,a,other_data):
self.a = a
def find_new_b(self):
....
def solve(c):
return c.find_new_b()
Jede Instanz class A
hat eine Liste von Instanzen von class B
, die in einer inkrementellen Weise hinzugefügt werden.
Ich muss über alle Instanzen von class A
iterieren und für jedes von ihnen ein neues Element von class B
finden.
ich multiprocessing
bin mit, dass
list_of_c_elements = [...]
pool = multiprocessing.Pool()
results = pool.map(solve, list_of_c_elements)
Das Problem
In Ergebnissen zu tun, habe ich eine Liste von Ergebnissen, und ich möchte davon Instanz class A
die neue Instanz verstehen class B
gehört. Jede Instanz von class B
ist generisch, und ich möchte die beiden Klassen entkoppelt halten.
Considered Lösung
ändern solve()
zu:
def solve(c):
return (c.a, c.find_new_b())
Ich habe alle Elemente von class A
vergleichen Ich habe mit der eine (sehr ineffizient) zurückgegeben.
for output in results:
output[0].add_element(output[1])
da die Instanz von class A
zurückgekehrt ist ein weiteres Beispiel: Ich kann so etwas wie nicht tun.
Gibt es einen effizienteren Weg, um mein Ziel zu erreichen?
Für die zweite überlegte Lösung, was meinst du, du kannst es nicht verwenden "da das Objekt vom Typ A zurückgegeben ist ein anderes Objekt"? – martineau
In einer Iteration könnte ich mehr als einmal die Lösung mit dem gleichen Objekt vom Typ A aufrufen und mehr als 2 Ergebnisse für das gleiche Objekt erhalten. Mit der zurückgegebenen Ausgabe [0] und der Ausgabe [0] .add_b_element (Ausgabe [1]) für jedes Element in den Ergebnissen würden also zwei verschiedene Objekte vom Typ A hinzugefügt. – newbie
Also sagen Sie, dass die 'list_of_c_elements' kann haben Sie doppelte 'C'-Instanzen drin? Scheint so zu sein - das Hinzufügen eines b-Elements zweimal zu vermeiden - wäre ein Problem, egal was du tust. Hinweis Klasse 'A' hat keine Methode mit dem Namen' add_b_element() '. – martineau