Python Langsam - Keine PC Leistung?

3 Antworten

Was der Grund dafür ist, dass nur 1 % bis 4 % deiner CPU ausgelastet werden kann ich dir nicht sagen.

Aber ich weiß aus persönlicher Erfahrung, dass Python langsam ist, was Berechnungen angeht, was einer der Gründe ist, warum ich schnell das Interesse an Python verloren hatte, aber nicht der einzige.

Nimm lieber Cython statt Python.

https://de.wikipedia.org/wiki/Cython


Mokelol 
Beitragsersteller
 19.07.2017, 21:25

Und anderen Systemen(C++/C#/Java) läuft es erstaunlicher weise genau so schnell.... Kann man irgendwie Mehrkernmodus oder so aktivieren?

1

Simple Berechnungen brauchen nunmal wenig CPU. Du führst diese Dinge ja hintereinander aus, weswegen er nicht auf die gesamte Prozessorleistung zurückgreift. Das ist so, als würdest du in einem Taschenrechner ständig eine Summe bilden und wieder löschen. Das lastet den Rechner auch nicht aus, dauert aber lange.

Ich sehe verschiedene Möglichkeiten um die Addition zu beschleunigen:

a) Du verwendest Multi-Threading, was in Python gar nicht so schwer umzusetzen ist. Dann kannst du deinen Datensatz in 4 Teile aufteilen und beschäftigst je einen Kern mit einem Viertel deiner Daten. Oft ist aber das Ergebnis von Multi-Threading nicht so viel schneller, wie man es sich erhofft.

b) du machst aus einem linearen Problem ein Array-Problem. Wenn du z.B. 1.000.000 Integer mit 1.000.000 anderen Integers addieren willst, ist ein Loop bedeutend langsamer, als wenn du numpy verwendest.

Code-Beispiele für eine Addition von a als [0, 1, 2, 3, ...., 1.000.000] und b [0, 2, 4, 6, ...., 2.000.000]

Version A - klassisches For-Loop
a = range(0, 1000000, 1)
b = range(0, 2000000, 2)
c = []
for i in range(len(a)):
c.append(a[i] + b[i])

>> Dauer: 0.23 Sekunden

Version B - List-Comprehension

a = range(0, 1000000, 1)
b = range(0, 2000000, 2)

c = [a[i] + b[i] for i in range(len(a))]

>> Dauer: 0.16 Sekunden

Version C - Numpy-Array-Addition
import numpy

a = numpy.arange(0, 1000000, 1)
b = numpy.arange(0, 2000000, 2)

c = a + b

>> Dauer: 0.002 Sekunden

wie sieht denn das Script aus?

wenn es irgendwie möglich ist mir das schicken...



Mokelol 
Beitragsersteller
 19.07.2017, 21:21

Da steht schlicht und simpel nur drin, dass zwei Wert addiert werden, dass das Ergebnis geprüft und ggf. zurück gesetzt wird

0