【发布时间】:2016-11-18 11:54:40
【问题描述】:
昨天我问了一个问题: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 所花费的时间相同。为什么呢?有没有办法并行填充所需的字典并实际提高速度?我在 48 核 HPC 上运行它。
【问题讨论】:
-
可能是使用多处理的开销比做复杂函数处理的开销大。也许让
read_energies()每次处理一个可变数量的数据帧可以让你调整到合适的程度,如果它变得有利的话。
标签: python multiprocess