Warum verwendet Multiprocessing nur einen einzigen Kern, nachdem ich numpy importiert habe?

Ich bin mir nicht sicher, ob dies mehr als Betriebssystemproblem gilt, aber ich dachte, ich würde hier nachfragen, falls jemand einen Einblick in das Python-Ende der Dinge hat.

Ich habe versucht, eine CPU-last zu parallelisierenfor Schleife mitjoblibAber ich stelle fest, dass, anstatt dass jeder Arbeitsprozess einem anderen Kern zugewiesen wird, alle demselben Kern zugewiesen werden und kein Leistungsgewinn entsteht.

Hier ist ein sehr triviales Beispiel ...

from joblib import Parallel,delayed
import numpy as np

def testfunc(data):
    # some very boneheaded CPU work
    for nn in xrange(1000):
        for ii in data[0,:]:
            for jj in data[1,:]:
                ii*jj

def run(niter=10):
    data = (np.random.randn(2,100) for ii in xrange(niter))
    pool = Parallel(n_jobs=-1,verbose=1,pre_dispatch='all')
    results = pool(delayed(testfunc)(dd) for dd in data)

if __name__ == '__main__':
    run()

... und hier ist was ich sehehtop Während dieses Skript ausgeführt wird:

Ich starte Ubuntu 12.10 (3.5.0-26) auf einem Laptop mit 4 Kernen. Deutlichjoblib.Parallel Gibt es eine Möglichkeit, diese Prozesse auf verschiedenen Kernen ausführen zu lassen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage