Постоянные Процессы После Пула 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 ответ:
Из Python docs, похоже, вам нужно сделать:
p.close() p.join()
После
map()
указать, что рабочие должны прекратить работу, а затем ждать, пока они это сделают.