从Ubuntu 10.10升级到12.04后,multiprocessing.map和joblib只使用1个cpu

use*_*871 5 python multiprocessing ubuntu-12.04

我有一些完美的python代码,它使用了多处理模块,并在我的机器上以100%加载了所有8个CPU.

在我从Ubuntu 10.10升级到12.04之后(最明显的事情,也许我做了别的事情打破了一切),它停止了工作.经过大量调试后,我发现即使在最简单的用例中,两个模块也仅使用1个CPU:

from pylab import *
import multiprocessing as mp
from joblib import Parallel, delayed

def f(i):
    # Slow calculation
    x = 1
    for j in range(100000): x = cos(x)
    print i, x

if __name__ == '__main__':
    # Try to multiprocess with multiprocessing
    mp.Pool(processes=8).map(f, range(100))
    # Try to multiprocess with joblib
    Parallel(n_jobs=8)(delayed(f)(i) for i in range(100))
Run Code Online (Sandbox Code Playgroud)

我需要在我的系统中使用所有8个CPU.我应该注意什么想法来解决这个问题?

编辑:

正如ali_m在这里的评论和回答中指出的那样 为什么多重处理在我导入numpy之后只使用一个核心?问题与numpy搞乱cpu亲和力有关.调用

os.system('taskset -p 0xffffffff %d' % os.getpid())
Run Code Online (Sandbox Code Playgroud)

在我做任何多处理之前解决了我的问题.

sta*_*all 0

解决方案从@user1084871的问题帖子中移出。

正如@ali_m在此处的评论和对 Why does multiprocessing use only a single core after I import numpy? 的回答中指出的那样。numpy这个问题与搞乱CPU亲和力有关。呼唤

os.system('taskset -p 0xffffffff %d' % os.getpid())
Run Code Online (Sandbox Code Playgroud)

在我进行任何多重处理之前,我已经解决了这个问题。