Постоянные процессы Post Python Pool - PullRequest
5 голосов
/ 16 января 2012

У меня есть программа на 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 выходит из области видимости;эффективно, я создал утечку памяти.Процессы отображаются в моем приложении System Monitor как процессы Python, которые на данный момент не используют ЦП, но имеют достаточно памяти для поддержания своего состояния.

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

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

1 Ответ

5 голосов
/ 16 января 2012

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

p.close()
p.join()

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

...