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

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

1 ответ

Решение

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

близко()

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

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

прекратить ()

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

Другие вопросы по тегам