Warum hat mein Python-Programm nur 33% CPU pro Prozess? Wie kann ich Python nutzen alle verfügbaren CPU?

7

Ich benutze Python 2.5.4. Mein Computer: CPU AMD Phenom X3 720BE, Mainboard 780G, 4GB RAM, Windows 7 32 Bit.

Ich benutze Python-Threading, kann aber nicht jeden python.exe-Prozess zu 100% CPU verbrauchen. Warum verwenden sie nur etwa 33-34% im Durchschnitt?

Ich möchte alle verfügbaren Computerressourcen auf diese großen Berechnungen richten, um sie so schnell wie möglich zu vervollständigen.

BEARBEITEN: Danke an alle. Jetzt benutze ich Parallel Python und alles funktioniert gut. Meine CPU ist jetzt immer bei 100%. Danke allen!

    
AloneRoad 16.11.2009, 16:33
quelle

7 Antworten

29

Es scheint, dass Sie eine 3-Kern-CPU haben. Wenn Sie mehr als einen CPU-Kern in nativem Python-Code verwenden möchten, müssen Sie mehrere Prozesse generieren. (Zwei oder mehr Python-Threads können nicht gleichzeitig auf verschiedenen CPUs ausgeführt werden)

Als R. Pate sagte, Pythons multiprocessing Modul ist eine Möglichkeit. Ich würde jedoch vorschlagen, stattdessen Parallel Python zu betrachten. Es kümmert sich um die Verteilung von Aufgaben und Message-Passing. Sie können sogar Aufgaben auf vielen separaten Computern ausführen, ohne dass sich Ihr Code ändert.

Die Verwendung ist ziemlich einfach:

%Vor%     
intgr 16.11.2009, 16:42
quelle
23

Probieren Sie das Multiprocessing -Modul aus, da Python, obwohl es echte, native Threads hat, ihre gleichzeitige Verwendung einschränkt während die GIL gehalten wird. Eine andere Alternative, und etwas, das Sie betrachten sollten, wenn Sie echte Geschwindigkeit brauchen, ist das Schreiben eines C-Erweiterungsmoduls und das Aufrufen von Funktionen in Python. Sie können die GIL in diesen C-Funktionen freigeben.

Siehe auch David Beazley Mindblowing GIL .

    
Roger Pate 16.11.2009 16:36
quelle
10

Global Interpreter Lock

  

Die Gründe für die Verwendung einer solchen Sperre sind:

%Vor%      

Anwendungen in Sprachen mit geschrieben   Eine GIL muss separate Prozesse verwenden   (d. h. Dolmetscher) voll zu erreichen   Nebenläufigkeit, wie jeder Dolmetscher hat   seine eigene GIL.

    
Sivvy 16.11.2009 16:44
quelle
1

Aus der CPU-Nutzung sieht es so aus, als ob Sie immer noch auf einem einzigen Kern laufen. Versuchen Sie, eine triviale Berechnung mit 3 oder mehr Threads mit demselben Threading-Code auszuführen und zu prüfen, ob alle Cores verwendet werden. Wenn dies nicht der Fall ist, stimmt möglicherweise etwas mit Ihrem Code nicht.

    
Saulius Žemaitaitis 16.11.2009 16:40
quelle
1

Was ist mit Stackless Python ?

Stackless Python ?     
user212062 16.11.2009 16:51
quelle
0

Ihr Flaschenhals ist wahrscheinlich woanders, wie die Festplatte (Paging) oder Speicherzugriff.

    
nicholaides 16.11.2009 16:35
quelle
0

Sie sollten einige Betriebssystem- und Python-Überwachung durchführen, um festzustellen, wo sich der Flaschenhals befindet.

Hier sind einige Informationen für Windows 7:

Systemmonitor : Mithilfe des Windows-Systemmonitors können Sie untersuchen, wie sich die ausgeführten Programme auf die Leistung Ihres Computers auswirken, und zwar sowohl in Echtzeit als auch durch Sammeln von Protokolldaten für die spätere Analyse. ( Systemsteuerung-> Alle Systemsteuerungselemente-> Performance-Informationen und Tools> Erweiterte Tools> Systemmonitor anzeigen)

Ressourcenmonitor : Der Windows-Ressourcenmonitor ist ein Systemtool, mit dem Sie Informationen zur Verwendung von Hardware (CPU, Speicher, Festplatte und Netzwerk) und Software (Dateihandles und Module) anzeigen können in Echtzeit. Mit dem Ressourcenmonitor können Sie Prozesse und Dienste starten, anhalten, anhalten und fortsetzen. ( Systemsteuerung-> Alle Elemente der Systemsteuerung -> Leistungsinformationen und -werkzeuge> Erweiterte Tools> Ressourcenmonitor anzeigen )

    
Chad 16.11.2009 16:43
quelle