Pythonでマルチプロセッシングされた関数から出力を抽出する方法を知りたいと思います。私はマルチプロセッシングを初めて学び、それがどのように機能するかについては限られた理解しか持たない。マルチプロセッシングされたPython関数からの出力の抽出
InfForecastとInitialStorageには31個の異なる入力を使用して最適化を実行する必要があります(現在は最大10,000個の入力と独立した最適化を実行できます)。私は、マルチプロセッシングを使って複数の独立した最適化を同時に処理することをスピードアップできることを期待していました。私が望むのは、(5,31)次元を持つ配列 "Nextday"に出力される出力(各最適化の5つの値)です。それは書かれたコードが空であるかアクセスできないということを得たので、次の日の出力と思われます。値を抽出/アクセスして翌日に配置するにはどうすればよいですか?
注:関数main(...)は非常に複雑な最適化問題です。私は問題がそれを提供することなく理解するのは簡単だと思う。それは私がそれをループして、範囲(31)の各iに対してそれを呼び出すときに機能します。これに加えて
from multiprocessing.pool import ThreadPool as Pool
Nextday=np.zeros((5,31))
pool_size = 4 # Should I set this to the number of cores my machine has?
pool = Pool(pool_size)
def optimizer(InfForecast, InitialStorage):
O=main(InfForecast,InitialStorage)
return [O[0][0], O[0][1], O[0][2], O[0][3], O[0][4]]
for i in range(31):
pool.apply_async(optimizer, (InfForecast[i],InitialStorage[i]))
pool.close()
Nextday=pool.join()
、私は、これは物事を行うための最善の方法であるかどうかはわかりません。それが動作している(私はそれが確信していない)確かに遅いようです。私はマルチスレッド対スレッドを行う方が良いかもしれないと読んでいましたが、これはスレッディングと思われますか?もし私が間違っているなら、私を許してください。
コード内のコメントでわかるように、pool_sizeを選択する方法についても興味があります。私は最終的にクラウドサーバ上でこれを実行している可能性があるので、私が使用したいと思うpool_sizeが自分のマシン上で使用する数字と少し異なると思います。コアの数だけですか?
アドバイスをいただければ幸いです。
あなたはpool.mapを見ましたか? – thebjorn
私はドキュメンテーションを見てきましたが、それはすべて私の頭の上にあります。私はプログラミングにはかなり新しいです。それは私の特定の場合にそれを使用する方法は私には分かりません。 – Kingle