Multicore Programmierung mit mehreren Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
g123
User
Beiträge: 25
Registriert: Donnerstag 11. Januar 2018, 15:36

Hallo Leute,
probiere momentan meinen Code durch Multicore Processing schneller laufen zu lassen.
Jedoch kann man der Methode .map nur eine Variable übergeben, ich hab das ganze probiert mit Listen von Listen zu lösen, jedoch braucht mein Code durch dieses erstellen der Listen von Listen viiiiilel länger als im single core Durchlauf. Kennt ihr eine bessere Lösung?
Hier mal ein Beispiellcode von meinem Vorgehen:

Code: Alles auswählen

def add(a, b, c):
    x = a + b + c
    print(x)


CPUS = multiprocessing.cpu_count()
WORKERS = multiprocessing.Pool(processes=CPUS)

Tasklist1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Tasklist2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Tasklist3 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

a = []
i = 0
while i < len(Tasklist1):
    a.append([Tasklist1[i], Tasklist2[i], Tasklist3[i]])
    i += 1


WORKERS.starmap(add, a)
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte gewöhn dir die Namenskonventionen für Python wie in PEP8 beschrieben an - KONSTANTEN werden groß geschrieben, KlassenHabenCamelCase, und variablen_sind_klein_mit_unterstrich.

Bei dir geht das alles wild durcheinander, und verwirrt dadurch.

Das ganze CPU-count-Gedöns kannst du dir sparen, multiprocessing macht das automatisch.

Und deine Liste a entsteht ganz einfach durch

a = zip(Teilliste1, Teilliste2, Teilliste3)

Zu deinem Problem: es ist ziemlich viel Aufwand, diverse Prozesse hochzufahren, und zwischen ihnen zu kommunizieren. Das hat zur Folge, das nicht jedes triviale Problem davon profitiert, so wie deines. Sondern erst bei entsprechend vielen Daten eine Verbesserung zu bemerken ist. Und zweitens erzwingst du durch die print-Anweisungen mindestens mal ein langsames warten auf IO, und schlimmstenfalls sogar eine serialisierung aller Aufgaben.
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Zusätzlich zu dem Aufwand den __deets__ beschrieben hat, kommt auch noch das die Ergebnisse der Aufrufe alle zu dem startenden Prozess zurückgemeldet werden und dort in die richtige Reihenfolge gebracht werden müssen und auch Ausnahmen zurück kommuniziert werden. Aufwand den Du überhaupt nicht brauchst, weil Du keines der Ergebnisse verwendest. Bei den Ausnahmen wird aus Deinem Code nicht klar, welches Verhalten Du Dir da wünschen würdest. Also ob Du darüber informiert werden möchtest, oder ob das die anderen Berechnungen nicht stoppen soll.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten