2016-02-23 6 views
0

Я написал программу python для запуска параллельных процессов (16) с использованием пула для обработки некоторых файлов. В начале прогона количество процессов поддерживается на уровне 16 до тех пор, пока почти все файлы не будут обработаны. Затем по некоторым причинам, которые я не понимаю, когда осталось только несколько файлов, за один раз выполняется только один процесс, который делает время обработки намного дольше, чем необходимо. Не могли бы вы помочь с этим?Пул многопроцессорности Python количество заданий неверно

+2

Без какого-либо кода и без какой-либо информации о вашей стратегии планирования будет довольно трудно, чтобы помочь вам. Посмотрите http://stackoverflow.com/help/mcve. – hagello

+0

Вероятно, каждый процесс имеет специальную нагрузку при запуске. он останавливается, когда закончит. –

+0

Привет, код идет очень просто: пул multiprocessing.Pool (процессы = 16), тогда pool.map (...) используется для сопоставления функции со списком аргументов. – james0011

ответ

0

Python перед запуском процесса, который вы указали в applyasync/asyncmap пула, назначает каждому работнику часть работы.

Например, скажем, что у вас есть 8 файлов для обработки, и вы запускаете пул с 4 рабочими.

Перед началом обработки файла каждому работнику будет назначено два конкретных файла. Это означает, что если какой-то рабочий заканчивает свою работу раньше других, просто «переломит» и не начнет помогать другим.

+0

Итак, что я могу сделать, чтобы всегда запускать максимальное количество процессов (<= 16)? Потому что, когда осталось всего несколько файлов, только одно задание запускается одновременно, один за другим, что делает общее время чрезвычайно длинным. Благодаря! – james0011

+0

Всегда максимальное количество процессов. Но для получения дополнительной информации я должен был бы попросить пример кода. Я не могу ответить больше, не имея конкретного кода. – Xxxo

+0

Привет, как я писал в ответ на hagello, код протекает очень просто: пул multiprocessing.Pool (процессы = 16), то pool.map (...) используется для сопоставления функции со списком аргументов, которые это список файлов для обработки. Благодаря! – james0011

0

Force map() использовать chunksize 1 вместо того, чтобы гадать лучшее значение само по себе, эс .:

pool = Pool(16) 
pool.map(func, iterable, 1) 

Это должно (теоретически) гарантирует лучшее распределение нагрузки между работниками до конца входные данные.

См here

Смежные вопросы