У меня есть цикл for с 2 пулами:
if __name__ == '__main__':
for length in range(1, 15, 5):
def map_CCWP(it):
return CCWP(G, length, Ep)
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
Scores = pool.map(map_CCWP, range(R))
S = []
# some work to get S
def map_AvgIAC (it):
return avgIAC(G, S, Ep, I)
pool2 = multiprocessing.Pool(processes=multiprocessing.cpu_count())
T = pool2.map(map_AvgIAC, range(4))
Однако во время работы он использует все больше и больше памяти, предположительно потому, что каждый раз создает новые рабочие процессы пула. Я пытался удалять пулы в конце каждой итерации, но это все равно увеличивает объем памяти.
Другой вариант заключался в том, чтобы поставить пулы под условие:
if pool == None:
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
и он действительно не использует так много памяти. Однако аргументы каждой итерации для функций map_CCWP
и map_AvgIAC
меняются, и, как я обнаружил, pool.map
будет использовать map_CCWP
с начальным length
и map_AvgIAC
с начальным S
.
Как я могу запустить пул для функций, которые меняются на каждой итерации и не увеличивают использование памяти?