Ich habe eine Liste von Klasseninstanzen. Jedes dieser Klassenobjekte hat eine Methodenfunktion, die ich ausführen möchte, und ich möchte über die Klasseninstanzen parallelisieren, da es eine Menge von ihnen gibt. Zum Beispiel habe ich diese Klasse Objekt:Übergabe einer Liste von Klasseninstanzen an multiprocessing.Pool und paralleles Ausführen der Methodenfunktion für jede Klassenobjekte
class Person(object):
def __init__(self, name):
self.name = name
def register(self):
self.registered = True
Jetzt definiert ich eine Liste von Klasseninstanzen von Person()
persons = [Person(i) for i in ["Bernard", "Enrik", "Joseph"]]
Ich möchte das Ausführen von Person.register()
Methodenfunktion über den Werten in Personen parallelisieren. Mit Multiprocessing.Pool, hier ist was ich getan habe. Da Sie die Methodenfunktion nicht pürieren können, verpacke ich sie in eine andere Funktion.
import multiprocessing as mp
def reg(person):
person.register()
pool = mp.Pool(processes=mp.cpu_count()//2)
res = list(pool.map(reg, persons))
Der Code läuft durch die Art und Weise, ohne Fehler, jetzt erwarte ich, dass jede Person Instanz in der Liste wird ein Attribut registered
Satz True
haben, aber wenn ich jede Klasse Instanz überprüfen, ist es nicht Attribut enthalten registered
. Wenn zum Beispiel registered
Überprüfung ist ein Attribut von Personen [0],
hasattr(persons[0], "registered")
>>> False
Warum ist das so? Wie kann ich das lösen?
Sie haben die Karte. Das ist ein guter Anfang. Jetzt sammle es in einem Behälter und sei glücklich. 'liste (pool.map (reg, personen))' wäre mein erster versuch als 'liste (map (reg, personen))' wird das attribut für alle deine '' '' personen setzen;) – Uvar
Meinst du soll ich sagen eine return-Anweisung in 'Person.register()' und mit der 'liste (pool.map (reg, persons))', sollte ich eine andere Funktion ausführen, die jedem Objekt das Attribut 'registred' explizit zuweist? – bninopaul