マルチプロセッシングを 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 の問題ではないと思います。
おそらく、私のオリジナルの問題を与えることで、答えや解決策の可能性が高まる可能性があります。
30,000 個以上の文字列のリストがあり、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)