マルチプロセッシングと並行して辞書を埋める私は質問を:Reading data in parallel with multiprocess昨日
、私は非常に良い答えを得た、と私は正しいとしてマークされた答えに記載されたソリューションを実装しました。
def read_energies(motif):
os.chdir("blabla/working_directory")
complx_ener = pd.DataFrame()
# complex function to fill that dataframe
lig_ener = pd.DataFrame()
# complex function to fill that dataframe
return motif, complx_ener, lig_ener
COMPLEX_ENERGIS = {}
LIGAND_ENERGIES = {}
p = multiprocessing.Pool(processes=CPU)
for x in p.imap_unordered(read_energies, peptide_kd.keys()):
COMPLEX_ENERGIS[x[0]] = x[1]
LIGAND_ENERGIES[x[0]] = x[2]
私はちょうどpeptide_kd.keys()
を反復処理し、一つDataFrames
1を埋めるかのようしかし、この解決策は、同じ時間がかかります。どうしてこんなことに?希望のdictsを並行していっぱいにして実際にスピードを上げる方法はありますか?私は48コアHPC上で実行しています。
マルチプロセッシングを使用するオーバーヘッドが、複雑な関数処理を行うオーバーヘッドよりも大きい場合があります。おそらく、 'read_energies()'が可変個のデータフレームを処理すると、その都度ポイントを調整することができるようになり、それが有利になったでしょう。 – martineau