我有一些完美运行的 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。我应该注意什么来解决这个问题?
解决方案已移动 https://meta.stackexchange.com/q/309552/997587 from @用户1084871 https://stackoverflow.com/users/1084871/user1084871的提问帖。
As @ali_m https://stackoverflow.com/users/1461210/ali-m在此处的评论和答案中指出为什么导入 numpy 后多处理仅使用单个核心? https://stackoverflow.com/questions/15639779/what-determines-whether-different-python-processes-are-assigned-to-the-same-or-d问题与numpy
搞乱了 cpu 亲和力。呼唤
os.system('taskset -p 0xffffffff %d' % os.getpid())
在我进行任何多重处理之前,我已经解决了这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)