У меня есть следующий код, пытающийся выполнить некоторые вычисления параллельно с использованием многопроцессорной обработки Python
import numpy as np
import multiprocessing
def prestart():
...
pool = multiprocessing.Pool(processes=cores)
a_list = np.linspace(0.01, 0.1, 10)
b_list = np.linspace(0.01, 0.25, 10)
c_list = np.linspace(0.7, 1, 5)
d_list = np.linspace(0.01, 10, 10)
e_list = np.linspace(0.1, 0.3, 10)
f_list = np.linspace(0.7, 1, 5)
g_list = np.linspace(0.2, 0.9, 20)
h_list = np.linspace(0.01, 10, 10)
i_list = np.linspace(0.75, 1, 10)
for a in a_list:
for b in b_list:
for c in c_list:
for d in d_list:
for e in e_list:
for f in f_list:
for g g_list:
for h in h_list:
for i in i_list:
pool.apply_async(prestart, (a, b, c, d, e, f, g, h, i))
pool.close()
pool.join()
Как видите, эти списки дали 500 миллионов комбинаций и, следовательно, 500 миллионов итераций во вложенных циклах for.
Похоже, что Python вычислит все комбинации и сохранит эти комбинации в памяти, выполняя мои вычисления (память быстро израсходуется и каждая загрузка ЦП колеблется).Если я минимизирую общую комбинацию до нескольких миллионов, все прошло нормально (использование памяти в какой-то момент стабилизировалось, а загрузка всех процессоров - 90%).
Как я могу оптимизировать код?