Dlaczego wieloprocesowość używa tylko jednego rdzenia po zaimportowaniu numpy?

Nie jestem pewien, czy jest to bardziej problem z systemem operacyjnym, ale pomyślałem, że chciałbym zapytać, czy ktoś nie ma wglądu w końcówkę Pythona.

Próbowałem zrównoważyć obciążenie procesorafor używać pętlijoblib, ale uważam, że zamiast przypisywania każdego procesu roboczego do innego rdzenia, kończę się na tym, że wszystkie są przypisane do tego samego rdzenia i nie zwiększają wydajności.

Oto bardzo trywialny przykład ...

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()

... a oto co widzęhtop podczas działania tego skryptu:

Używam Ubuntu 12.10 (3.5.0-26) na laptopie z 4 rdzeniami. Wyraźniejoblib.Parallel uruchamia oddzielne procesy dla różnych pracowników, ale czy jest jakiś sposób, aby te procesy mogły być wykonywane na różnych rdzeniach?

questionAnswers(3)

yourAnswerToTheQuestion