Joblib并行增加n个作业的时间

时间:2013-03-26 13:56:49

标签: python-3.x multiprocessing wordnet

在python 3.3中尝试让多处理工作(并理解它)时,我很快恢复到joblib,让我的生活更轻松。但我经历了一些非常奇怪的事情(在我看来)。运行此代码时(只是为了测试它是否有效):

Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(200000))

大约需要9秒,但增加n_jobs实际需要更长的时间...... n_jobs=2需要25秒,而n_jobs=4需要27秒。
如果我错了,请纠正我...但如果n_jobs增加,那么它应该更快吗?我有一台Intel I7 3770K所以我想这不是我的CPU的问题。

也许给我原来的问题可以增加答案或解决方案的可能性 我有一个30k +字符串的列表,data,我需要对每个字符串做一些事情(独立于其他字符串),大约需要14秒。这只是测试我的代码是否有效的测试用例。在实际应用中,它可能是100k +条目,因此需要多处理,因为这只是整个计算的一小部分。 这是计算的这一部分需要做的事情:

data_syno = []
for entry in data:
    w = wordnet.synsets(entry)
    if len(w)>0: data_syno.append(w[0].lemma_names[0])
    else: data_syno.append(entry)

1 个答案:

答案 0 :(得分:0)

n_jobs参数具有反直觉性,因为要使用的最大内核数为-1。在1它只使用一个核心。在-2它使用最多1个核心,在-3它使用最多2个核心,等等。这就是我如何阅读它:

  

来自文档:

n_jobs:int:

The number of jobs to use for the computation. If -1 all CPUs are used. If 1 is given, no parallel computing code is used at all, which is useful for debugging. For n_jobs below -1, (n_cpus + 1 + n_jobs) are used. Thus for n_jobs = -2, all CPUs but one are used.