在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)
答案 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.