Вчера я задал вопрос: 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()' обрабатывает числовые кадры с переменными номерами, каждый раз позволял бы вам настраивать вещи в точку, там было выгодно. – martineau