2

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

1 回答 1

1

n_jobs 参数是反直觉的,因为要使用的最大内核数为 -1。在 1 它只使用一个核心。在 -2 它使用 max-1 个核心,在 -3 它使用 max-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.
于 2013-08-12T13:56:27.060 回答