ich habe wieder mal ein kleine Frage zur Verwendung der Klasse Pool aus dem multiprocessing-Modul.
Innerhalb einer Klassenmethode instanziiere ich einen Pool() (multiprocessing-Modul), dessen map()-Funktion übergebe ich eine weitere Klassenmethode + Liste (Argumente für die Methode).
Die Methode, welche dann auf unterschiedlichen Prozessen läuft hat nur lesenden Zugriff auf eine Klassenvariable.
Solange ich keine Klassenvariable schreibe sollte alles gut sein?? Oder übersehe ich etwas?
Ich habe ein Minimalbeispiel zum besseren Verständnis mit angehängt .
Das Minimalbeispiel läuft tadellos!
In meiner Literatur wird dieser Fall leider nicht behandelt, daher bin ich mir unsicher auch wenn es tadellos ohne Fehler läuft!
Theoretisch müsste die Poolinstanz die Minimalbeispielinstanz vervielfachen (entsprechend der Anzahl der Prozesse). Jeder Prozess hat also eine eigene Instanz von Minimalbeispiel. Ist das richtig?
Seht ihr bei diesem Vorgehen Probleme?
Vielen Dank schon im Voraus zu euren Meinungen.
Martin
Code: Alles auswählen
import multiprocessing
from multiprocessing import Pool
class Minimalbeispiel:
def __init__(self):
self.ergebnis = None
self.summand1 = 5
def addiere(self, summand):
"""
:param int summand:
:return:
"""
return self.summand1 + summand
def startmultiprocessing(self):
"""
Start mehrerer Prozesse mittels Pool und map() aus multiprocessing-Modul
"""
p = Pool(processes=multiprocessing.cpu_count())
summanden = [i for i in range(multiprocessing.cpu_count())]
self.ergebnis = p.map(self.addiere, summanden)
p.close()
print(self.ergebnis)
def main():
minimal = Minimalbeispiel()
minimal.startmultiprocessing()
if __name__ == "__main__":
main()