Zu schnelles Multiprocessing.
Verfasst: Mittwoch 29. Januar 2020, 03:43
Hey,
ich habe in Python ein Programm geschrieben:
Download:
https://we.tl/t-AJ1Cuhw7gE
Dort habe ich 16 Funktionen erstellt, die alle 1 Sekunde "sleepen" - sprich warten.
Diese 16 Funktionen möchte ich jetzt mit multi-processing ausführen.
Da mein PC allerdings keine 16 Kerne hat, hätte ich mir erwartet, dass der Vorgang länger als 2 Sekunden dauert. Sprich zuerste arbeiten die Kerne möglichst viele Funktionen ab, und wenn diese abgearbeitet sind, kommt der Rest, was dann etwas über 2 Sekunden sein sollte.
Allerdings stellt sicher heraus, dass das Ganze nur etwas über 1 Sekunde gedauert hat. Sprich es wurden alles 16 Funktionen gleichzeitig abgearbeitet.
Könnt ihr euch bzw. mir erklären, warum das so ist?
LG Spedex
Code:
ich habe in Python ein Programm geschrieben:
Download:
https://we.tl/t-AJ1Cuhw7gE
Dort habe ich 16 Funktionen erstellt, die alle 1 Sekunde "sleepen" - sprich warten.
Diese 16 Funktionen möchte ich jetzt mit multi-processing ausführen.
Da mein PC allerdings keine 16 Kerne hat, hätte ich mir erwartet, dass der Vorgang länger als 2 Sekunden dauert. Sprich zuerste arbeiten die Kerne möglichst viele Funktionen ab, und wenn diese abgearbeitet sind, kommt der Rest, was dann etwas über 2 Sekunden sein sollte.
Allerdings stellt sicher heraus, dass das Ganze nur etwas über 1 Sekunde gedauert hat. Sprich es wurden alles 16 Funktionen gleichzeitig abgearbeitet.
Könnt ihr euch bzw. mir erklären, warum das so ist?
LG Spedex
Code:
Code: Alles auswählen
import multiprocessing
import time
def kern1():
print("Kern 1 Startet")
time.sleep(1)
print("Kern 1 Ende")
def kern2():
print("Kern 2 Startet")
time.sleep(1)
print("Kern 2 Ende")
def kern3():
print("Kern 3 Startet")
time.sleep(1)
print("Kern 3 Ende")
def kern4():
print("Kern 4 Startet")
time.sleep(1)
print("Kern 4 Ende")
def kern5():
print("Kern 5 Startet")
time.sleep(1)
print("Kern 5 Ende")
def kern6():
print("Kern 6 Startet")
time.sleep(1)
print("Kern 6 Ende")
def kern7():
print("Kern 7 Startet")
time.sleep(1)
print("Kern 7 Ende")
def kern8():
print("Kern 8 Startet")
time.sleep(1)
print("Kern 8 Ende")
def kern9():
print("Kern 9 Startet")
time.sleep(1)
print("Kern 9 Ende")
def kern10():
print("Kern 10 Startet")
time.sleep(1)
print("Kern 10 Ende")
def kern11():
print("Kern 11 Startet")
time.sleep(1)
print("Kern 11 Ende")
def kern12():
print("Kern 12 Startet")
time.sleep(1)
print("Kern 12 Ende")
def kern13():
print("Kern 13 Startet")
time.sleep(1)
print("Kern 13 Ende")
def kern14():
print("Kern 14 Startet")
time.sleep(1)
print("Kern 14 Ende")
def kern15():
print("Kern 15 Startet")
time.sleep(1)
print("Kern 15 Ende")
def kern16():
print("Kern 16 Startet")
time.sleep(1)
print("Kern 16 Ende")
if __name__ == "__main__":
p1 = multiprocessing.Process(target=kern1)
p2 = multiprocessing.Process(target=kern2)
p3 = multiprocessing.Process(target=kern3)
p4 = multiprocessing.Process(target=kern4)
p5 = multiprocessing.Process(target=kern5)
p6 = multiprocessing.Process(target=kern6)
p7 = multiprocessing.Process(target=kern7)
p8 = multiprocessing.Process(target=kern8)
p9 = multiprocessing.Process(target=kern9)
p10 = multiprocessing.Process(target=kern10)
p11 = multiprocessing.Process(target=kern11)
p12 = multiprocessing.Process(target=kern12)
p13 = multiprocessing.Process(target=kern13)
p14 = multiprocessing.Process(target=kern14)
p15 = multiprocessing.Process(target=kern15)
p16 = multiprocessing.Process(target=kern16)
start_time = time.time()
p1.start()
p2.start()
p3.start()
p4.start()
p5.start()
p6.start()
p7.start()
p8.start()
p9.start()
p10.start()
p11.start()
p12.start()
p13.start()
p14.start()
p15.start()
p16.start()
p1.join()
p2.join()
p3.join()
p4.join()
p5.join()
p6.join()
p7.join()
p8.join()
p9.join()
p10.join()
p11.join()
p12.join()
p13.join()
p14.join()
p15.join()
p16.join()
end_time = time.time()
time_diff = end_time - start_time
print(f"Benötigte Zeit beträgt {time_diff} Sekunden")