multiprocessing.dummy in Python ist nicht die Nutzung 100% cpu
Ich bin dabei eine Maschine-learning-Projekt in Python, so dass ich zu tun haben, parallel predict-Funktion, die ich verwende in meinem Programm.
from multiprocessing.dummy import Pool
from multiprocessing import cpu_count
def multi_predict(X, predict, *args, **kwargs):
pool = Pool(cpu_count())
results = pool.map(predict, X)
pool.close()
pool.join()
return results
Das problem ist, dass alle meine Rechner geladen, nur auf 20-40% (in Summe 100%). Ich benutze multiprocessing.dummy, weil ich einige Probleme mit dem multiprocessing-Modul in Beizen Funktion.
InformationsquelleAutor Demyanov | 2014-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
multiprocessing.dummy
, bist du mit threads, nicht Prozesse:Das bedeutet, Sie sind nur durch den Global Interpreter Lock (GIL), und kann nur ein thread tatsächlich auszuführen CPU-gebundene Operationen zu einem Zeitpunkt. Das wird halten Sie von der uneingeschränkten Nutzung Ihrer CPUs. Wenn Sie wünschen, erhalten Sie die volle Parallelität auf alle verfügbaren Kerne, die wirst du brauchen, um die Beizen Problem, Sie schlagen mit
multiprocessing.Pool
.Beachten Sie, dass
multiprocessing.dummy
könnte noch nützlich sein, wenn die Arbeit, die Sie brauchen, um zu parallelisieren, ist die E /a-gebunden, oder nutzt eine C-Erweiterung, die Veröffentlichungen der GIL. Für Reine Python-code, aber Sie müssenmultiprocessing
.Python-threads sind echte OS-threads: Sie können parallel ausgeführt werden (wenn es mehrere CPU-Kerne). Nur Reine Python-code, der begrenzt ist von GIL. C-Erweiterungen wie
lxml
,regex
,numpy
können und release GIL und damit mehrere threads können parallel ausgeführt werden.Warum funktioniert das nicht für die OP?
wer weiß. Es könnte zahlreiche Gründe. Es gibt nicht genügend Informationen in der Frage. Hinweis: zum Zeitpunkt meines Kommentars die Antwort gar nicht erwähnen, dass GIL freigesetzt werden können. Es ist falsch anzunehmen, dass all performance-Probleme sind durch GIL in ein Python-Programm mit mehreren threads.
InformationsquelleAutor dano