2016-12-20 1 views
0

Ich führe ein rechenintensives Programm in Python, das ungefähr 10 Minuten benötigt, um auf meinem System zu laufen. Wenn ich mir die CPU-Auslastung anschaue, schwebt einer von acht Kernen bei etwa 70%, eine Sekunde bei etwa 20% und der Rest bei knapp 0%. Gibt es eine Möglichkeit, das Programm zu 100% zu zwingen, eine Einzelprozessor?Steuern von CPU-Auslastung und Threading in Python

bearbeiten: Ich erkenne, dass die Verwendung aller 8 Kerne keine gute Option ist, aber gibt es eine Möglichkeit, den einen Kern in 100% Nutzung zu zwingen?

+0

Python ist single threaded. –

+0

Wenn es nicht spezifisch für Python wäre, wäre es für Ihr Betriebssystem, das Sie nicht erwähnt haben. –

+0

Diese Frage hat eine Antwort, die Sie interessieren könnte: http://stackoverflow.com/questions/20939299/does-python-support-multithreading-can-it-speed-up-execution-time –

Antwort

0

Python ist nicht wirklich Multithread. Sie können Threads als eine bequeme Methode zum Verwalten logischer Prozesse erstellen, aber die Anwendung selbst hat eine global thread lock. Aus diesem Grund können Sie immer nur einen einzigen Thread verwenden.

Sie können eine andere Variante von Python verwenden, aber das könnte Ihnen weitere Probleme bereiten. Wenn Sie bereit sind, es in verschiedene Prozesse zu unterteilen, können Sie möglicherweise das Modul subprocess verwenden. Dies erzeugt zwei unterschiedliche Python-Prozesse, die jedoch unabhängig voneinander arbeiten können. Leider müssen Sie eine Methode kodieren, mit der sie kommunizieren.

1

Für Multi-Core-Anwendungen sollten Sie das multiprocessing-Modul anstelle von threading verwenden. Python hat einige (gut dokumentierte) Leistungsprobleme mit Threads. Suchen Sie nach google for Global Interpreter Lock, um weitere Informationen zu Python und der Thread-Leistung zu erhalten