Python3 Joblib-使用多个内核启动,降至单核

时间:2017-02-22 19:58:19

标签: python ubuntu parallel-processing ubuntu-16.04 joblib

我将在前言中说我是并行处理的新手。努力变得更好,但我找不到我的问题的答案,这似乎是相当独特的。

我遇到了这段代码的问题:

from joblib import Parallel
import multiprocessing

n_cores = multiprocessing.cpu_count()
Parallel(n_jobs=n_cores)(delayed(blexon)(gene,genomes) for gene in genes)

'基因'和'基因组'是字符串列表。在我的基因列表中,我可以拥有数百个基因。我正在使用Parallel来对所有这些基因运行这个过程,这是有效的!如果您认为基因与集合同时运行,那么对于前几个“集合”,我可以使用计算机的所有核心。但是,在几组之后,程序只使用一个核心。如果我有12个核心,12个基因将同时运行几次迭代,但在某些时候,只有一个基因会运行。

我发现有关Parallel的信息只使用了一个scipy核心(我在这个脚本中使用),但这是一种奇怪的行为:它在切换到使用单个核心之前暂时使用所有核心。

我不确定如何解决这个问题。有人有任何意见吗?

谢谢。

系统: Ubuntu 16.04 LTS Python 3.5.2 joblib 0.9.4

--- --- EDIT

以下是我用来尝试解决cpu亲和性问题的一些代码:

p = psutil.Process(os.getpid())
print(p.cpu_affinity())
p.cpu_affinity(range(multiprocessing.cpu_count()))
print(p.cpu_affinity())

输出:(此计算机有12个核心)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

- 编辑 -

在程序运行时观察htop(每次迭代可能需要几分钟)后,我发现内核数量逐渐减少。我开始使用12个内核,在此设置之后,我将并行运行11个内核。

0 个答案:

没有答案