Seite 1 von 1

mit 2 CPUs 2 Prozesse plus main?

Verfasst: Freitag 25. August 2017, 22:38
von Serpens66
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??

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Freitag 25. August 2017, 23:00
von jerch
@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?

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Freitag 25. August 2017, 23:05
von Serpens66
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?

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Freitag 25. August 2017, 23:22
von __deets__
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.

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Freitag 25. August 2017, 23:49
von Serpens66
__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?

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Samstag 26. August 2017, 00:12
von __deets__
Auf deinem Sytem laufen Dutzende Prozesse. Eher hunderte. Einer mehr, der nur wartet, ist wirklich völlig egal.

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Samstag 26. August 2017, 00:54
von Serpens66
__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

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Samstag 26. August 2017, 01:05
von __deets__
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.

Re: mit 2 CPUs 2 Prozesse plus main?

Verfasst: Samstag 26. August 2017, 08:23
von noisefloor
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