Постоянные Процессы После Пула Python


У меня есть программа на Python, выполнение которой занимает около 10 минут. Поэтому я использую Pool из multiprocessing, чтобы ускорить процесс:

from multiprocessing import Pool
p = Pool(processes = 6) # I have an 8 thread processor
results = p.map( function, argument_list ) # distributes work over 6 processes!

Он бежит гораздо быстрее, просто от этого. Да благословит Бог питона! И я подумал, что так оно и будет.

Однако я заметил, что каждый раз, когда я делаю это, процессы и их значительно увеличенное состояние остаются, даже когда p вышли из области действия; фактически, я создал утечку памяти. Процессы отображаются в моем приложении системного монитора как Python процессы, которые в данный момент не используют процессор, но значительную память для поддержания своего состояния.

Пул имеет функции close, terminate, и join, и я бы предположил, что один из них убьет процессы. Кто-нибудь знает, как лучше всего сказать моему пулу p, что я с ним покончил?

Большое спасибо за вашу помощь!

1 5

1 ответ:

Из Python docs, похоже, вам нужно сделать:

p.close()
p.join()

После map() указать, что рабочие должны прекратить работу, а затем ждать, пока они это сделают.