在尝试让多处理在 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)