ИМХО, лучшим решением было бы использование очередей и создание процесса вручную.Таким образом, вы получаете полный контроль над процессами.
- Создайте свою функцию, которая выполняет случайный лес после получения его
max_depth
из входной очереди.Выдвиньте результат в очередь вывода. - Вы поместите все свои значения
max_depth
в очередь ввода - Вы создаете ряд процессов, которые лучше всего соответствуют вашей архитектуре.Как правило, 8 процессов для 4 ядер (с Hyperthreading) являются отправной точкой goot
- Запустите процессы.
После запуска процессов каждый из них получит один аргумент из входной очереди иделает ваш RandomForest.После завершения одного процесса он помещает результат в другую очередь и получает другой аргумент из входной очереди.Используя очередь, вам не нужно заботиться о том, какой процесс завершается первым и т. Д., Поскольку очереди потокобезопасны, так что только один процесс может получить к ним доступ.Любой другой будет ждать доступа.Вам также не придется беспокоиться о том, каково ваше лучшее разделение списка max_depth
.Как только один процесс завершается, он автоматически получает новое значение для расчета.Если в очереди ничего нет, он останавливается.
Я обычно предпочитаю этот тип многопроцессорной обработки, чем Pool
, так как у меня немного больше контроля. Здесь - небольшой пример.