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