我有一些完美的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))
我需要在系统中使用所有8个CPU。我应该注意什么想法来解决这个问题?
编辑:
正如ali_m在这里的评论和答案中指出的那样
Why does multiprocessing use only a single core after I import numpy?问题与numpy
搞乱cpu亲和力有关。调用
os.system('taskset -p 0xffffffff %d' % os.getpid())
在我做任何多处理之前解决了我的问题。