Python Pebble ProcessPool как установить max_tasks
Пулы процессов Pebble принимают параметры для max_workers и max_tasks.
https://pythonhosted.org/Pebble/
Описание max_tasks немного неясно:
"Если max_tasks - число больше нуля, каждый работник будет перезапущен после выполнения равного количества задач".
Мой вопрос:
Что если оно не больше нуля? Как это ведет себя тогда?
Что значит перезагрузить работника? Допустим, max_tasks равно 5. Тогда каждый процесс выполнит 5 итераций, затем будет убит, а новый процесс будет перезапущен? Какая польза от этого?
Я знаю, что другие библиотеки позволяют настраивать карты пулов в зависимости от того, ожидается ли, что для выполнения каждой задачи потребуется аналогичное время или нет. Это уместно здесь?
В целом, какие рекомендации существуют для установки max_tasks?
Я запускаю функцию, которую нужно запустить для каждого элемента списка длиной += 160 000. Она полностью распараллеливается, и мой сервер имеет 8 ядер. Каждый вызов функции занимает примерно одно и то же время для завершения, самое большее в 3 раза дольше, чем среднее время.
Благодарю.
0 ответов
max_task
параметр аналогичен maxtaskperchild
в multiprocessing.Pool
, Связанная с Python 2 документация объясняет назначение такого параметра.
Рабочие процессы в пуле обычно работают в течение всей рабочей очереди пула. В других системах (таких как Apache, mod_wsgi и т. Д.) Часто встречается тенденция освобождения ресурсов, хранящихся у работников, - разрешать работнику в пуле выполнять только определенный объем работы перед выходом, очисткой и порождением нового процесса. заменить старый. Аргумент maxtasksperchild для пула предоставляет эту возможность конечному пользователю.
Другими словами, вы используете max_task
если вы хотите ограничить рост ресурсов, процессы могут выдержать. Это полезно, если вы имеете дело с библиотеками, которые, например, имеют утечку памяти или файловые дескрипторы. Другим вариантом использования является ограничение использования памяти фрагментацией памяти в процессе.