mit 2 CPUs 2 Prozesse plus main?

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
Serpens66
User
Beiträge: 259
Registriert: Montag 15. Dezember 2014, 00:31

Wenn ich 2 CPU zur Verfügung habe, heißt das ja, dass ich mit multiprocessing zeitgleich 2 Prozesse eröffnen kann, oder?

Doch was ist denn mit dem Prozess des Hauptskript, welches die 2 Prozesse öffnet?
Letzlich heißt das doch, dass ich, wenn ich 2 Prozesse per multiprocssing öffne, dass ich dann 3 Prozesse habe?!

Sollte ich bei 2 CPUs also nur einen Prozess öffnen und als 2ten den Hauptprozess weiterverwenden??
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Serpens66:
Das Problem löst das OS Deiner Wahl für Dich. Bei Deiner Wahl solltest du allerdings ein SMP-fähiges OS in Erwägung ziehen. Oder schreibst du an einem Python-OS?
Serpens66
User
Beiträge: 259
Registriert: Montag 15. Dezember 2014, 00:31

jerch hat geschrieben:@Serpens66:
Das Problem löst das OS Deiner Wahl für Dich. Bei Deiner Wahl solltest du allerdings ein SMP-fähiges OS in Erwägung ziehen. Oder schreibst du an einem Python-OS?
Zum testen nutze ich Windows 8.1
Der Dauerbetrieb soll auf Debian 8.1 stattfinden.

Also kann ich problemlos 2 Prozesse starten?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Überlegung stimmt schon. Aus Gründen der Strukturierung kann es aber trotzdem besser sein, 3 Prozesse zu starten. Damit zwei davon das gleiche möglichst gut tun, und halt einer auf die beiden wartet. Wenn alle drei rumrödeln wie Bolle sind sie natürlich nicht echt parallel.
Serpens66
User
Beiträge: 259
Registriert: Montag 15. Dezember 2014, 00:31

__deets__ hat geschrieben:Deine Überlegung stimmt schon. Aus Gründen der Strukturierung kann es aber trotzdem besser sein, 3 Prozesse zu starten. Damit zwei davon das gleiche möglichst gut tun, und halt einer auf die beiden wartet. Wenn alle drei rumrödeln wie Bolle sind sie natürlich nicht echt parallel.
Ok, danke.
Eigentlich muss ich nur wissen, ob das okay ist:

Code: Alles auswählen

def testen(a):
    return
if __name__ == "__main__":
    pool = concurrent.futures.ProcessPoolExecutor(2) 
    futures = []
    futures.append(pool.submit(testen, 1))
    futures.append(pool.submit(testen, 2))
    concurrent.futures.wait(futures) 
    print("Vollständig beendet!")
während des "wait" läuft ja theoretisch der main prozess dennoch weiter.
Leisten die beiden gestarteten Prozesse nun die volle Leistung?
Bin mir nicht sicher, was deine Aussage ist, aber ich glaube du sagst bereits, dass es gut ist, wenn einer auf die anderen 2 wartet, oder?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auf deinem Sytem laufen Dutzende Prozesse. Eher hunderte. Einer mehr, der nur wartet, ist wirklich völlig egal.
Serpens66
User
Beiträge: 259
Registriert: Montag 15. Dezember 2014, 00:31

__deets__ hat geschrieben:Auf deinem Sytem laufen Dutzende Prozesse. Eher hunderte. Einer mehr, der nur wartet, ist wirklich völlig egal.
ah danke.
Ich ging fälschlicherweise davon aus, dass 2CPU bedeutet, dass nur 2 Prozesse volle leistung bringen können.
Denn ich ging davon aus, dass obwohl der PRozess wartet, er weiterhin einen Teil der Leistung reserviert, wodurch die anderen 2 weniger Leistung haben.

Aber scheinbar wird nur Leistung verbraucht, wenn was anderes als warten gemacht wird.

danke
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Streng genommen ist das auch richtig. Aber "volle Leistung" im Sinne ununterbrochener Arbeit gibt es auf einem moderne OS eh nicht. Während deine Prozesse laufen kannst du ja auch die Maus schubsen, Emails werden empfangen, etc.

Jenseits spezieller Maßnahmen ist als sowieso nur soviel Leistung für einen Prozess möglich. Und OSse können eben auch viele Prozesse gut jonglieren, die eigentlich nix machen. Wie eben warten. Oder alle paar Sekunden Emails checken. Es gibt also keine Grund, multiprocessing nicht mit zwei Worker Prozessen zu nutzen, weil es eben einfacher ist so zu arbeiten, statt eine zu nutzen, und den Hauptprozess dann das gleiche tun zu lassen. Der kann auch einfach warten. Schrieb ich aber ja schon.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst grundsätzlich beliebig viele Prozesse starten bzw. so viele, wie das OS handeln kann. Macht nur in der Regel keinen Sinn, weil es sich irgendwann negativ auf die Performance auswirkt.

Guck' mal in dem Thread hier: viewtopic.php?f=1&t=40631
Da geht's auch um's Number Crunching und das `concurrent.futures` Modul. Mit dem Skript (am besten eine der optimierten Version weiter unten im Thread) kannst du testen, wie die Performance mit einer unterschiedlichen Anzahl von Prozessen ist. Da das Rechnen selbst auf einen Core i5 mit 4 Kernen ein wenig dauert, kann man da ganz du Unterschiede sehen.

Unter Linux kannst du ja auch zusätzlich die "niceness" eines Prozesses festlegen, also mit welcher Priorität (= wie viel CPU-Zeit) der Prozess läuft. Habe ich aber selber noch nie in Verbindung mit einem Python-Skript, was rechenintensiv ist, getestet, wie viel das tatsächlich bringt

Gruß, noisefloor
Antworten