私はいくつかの機能の速度を上げるためにPythonでいくつかのマルチプロセッシングを使用しようとしていますが、私はプロセスの作成に大きなコストがかかることを知っていますが、私はいくつかのマルチプロセッシングがそのトリックを行うことができると考えていました。複数の処理がシーケンシャルなPython 3.5より遅い
私は間違っていました(大きなwhoop)マルチ処理が遅くなったり、少なくとも高速ではないようでした。
for i in range(0, 3):
for j in range(0, 3):
result = my_function(my_args)
そして今、私はマルチプロセッシングを持っているもの:
pool = Pool()
for i in range(0, 3):
for j in range(0, 3):
result = pool.apply_async(my_function,my_args).get()
pool.close()
pool.join()
私はmy_functionのブツと実際の機能を置き換えるので、私は、マルチプロセッシングの前に持っていたもの、ここでいくつかのコンテキストを入れて 私の機能は、基本的に読むためのお尻の痛みです。
マルチプロセッシングを使用する場合の作業負荷は小さいですか、何か間違っていますか?
EDIT:
いくつかは、私が参加した後、最後にそれを使用するために必要な今、私は時々ポップランダムな例外を持つたびに、取得に使用するので、それはシーケンシャルに働いていた言ったように、ここでのトレースバックの終わり:
ファイル "/home/rtodo/anaconda3/lib/python3.5/multiprocessing/pool.py"、ライン608は、get レイズself._value はIndexError中:のうちポップインデックス範囲
ここに私のコードが修正されました
pool = Pool()
for i in range(0, 3):
for j in range(0, 3):
neigbhourhood[i][j] = pool.apply_async(my_function,my_args)
for k in range(0, 3):
for l in range(0, 3):
neigbhourhood[i][j] = neigbhourhood[i][j].get()
pool.close()
ここで、neigbhourhoodは3x3配列です。
編集の編集: 私はちょっとコードを変更しましたが、現在はプールが終了した後に閉じられ、私は参加しません。
どのプロセッサとOSを使用しますか?さらに、そのコードは実際にパラレルで関数呼び出しを実行しますか?私はそれが次の呼び出しを開始する前に結果を待つように直列にそれを実行すると思います。 – skyking
最初に 'get()'を呼び出すべきではありません。すべてのジョブが実行された後に 'get()'を呼び出します。スカイキングのように、あなたは一連のことを実行しています。 – justhalf
私はDebianにあり、Intel Core i3-4005U 1.7 GHzを持っています。関数呼び出しはparallellで実行されています。私は正直なところ考えませんでした。私はPythonのマルチプロセッシングに慣れていないので、わかりませんそうすることは、パラレルを行う正しい方法です。 –