Закрытие многопроцессорности после каждого параллельного задания

Я использую multiprocessing библиотеку Python, а также emcee, которая также использует разные потоки для реализации MCMC. Проблема в том, что даже когда я close pool все еще кажется, что python использует процессоры и замедляет работу ядер, и я понятия не имею, как эффективно освободить ядра после выполнения работы. Кто-нибудь может подсказать, что мне делать?
Обновление: Мой код уже опубликован здесь.


person Dalek    schedule 26.08.2014    source источник
comment
Когда вы говорите, что Python все еще использует процессоры и замедляет работу ядер, что вы имеете в виду? Как вы это тестируете?   -  person FrobberOfBits    schedule 26.08.2014
comment
@FrobberOfBits Я использую Ubuntu, а затем, когда я запускаю команду top, я вижу, что моя работа не была убита, и ядра все еще используются.   -  person Dalek    schedule 26.08.2014
comment
опубликуйте свой код, чтобы дать нам представление о том, как именно вы закрываете пул, а также предоставьте более подробную информацию о том, как вы используете int.   -  person FrobberOfBits    schedule 26.08.2014
comment
@FrobberOfBits Я разместил код.   -  person Dalek    schedule 26.08.2014


Ответы (1)


Закрытие Pool не останавливает его работу, это просто предотвращает добавление в него новых рабочих элементов:

закрыть()

Предотвращает отправку новых задач в пул. Как только все задачи будут выполнены, рабочие процессы завершатся.

Поэтому, если у вас много задач в очереди, закрытие Pool не повлияет на использование ресурсов — все рабочие будут продолжать потреблять эти задачи в очереди, пока они не исчезнут. Если вы хотите немедленно прервать все рабочие элементы, вам нужно использовать pool.terminate:

завершить()

Немедленно останавливает рабочие процессы, не завершая незавершенную работу. Когда объект пула очищается от мусора, terminate() будет вызываться немедленно.

person dano    schedule 26.08.2014