Какое максимальное количество многопроцессных процессов вы можете создать с помощью пула? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть код, где мне нужно реализовать метод, чтобы найти максимум в списке, содержащем 1341 URL, где мне нужно создать список значений, которые я получаю по введенному URL, и найти максимум.

Я пытался использовать Pool для ускорения этого процесса, но я не уверен, сколько многопроцессных процессов я могу сгенерировать.Например, если я использую:

if __name__ == '__main__':
with Pool(10) as p:
    print(p.map(find_max, urls))

Это работает, но все еще очень долго проходит через 1341 пункт в моем списке.Тогда я попробовал это:

if __name__ == '__main__':
with Pool(300) as p:
    print(p.map(find_max, urls))

Я получил сообщение об ошибке, говорящее, что я открываю слишком много файлов.Мне было интересно, какое максимальное число я могу поместить в «Pool (num)», чтобы получить максимальную эффективность.

1 Ответ

0 голосов
/ 02 июня 2018

300 - слишком много, чтобы иметь дело с операционной системой, поскольку становится все труднее внедрить новый процесс, хотя их уже много.В идеале вы должны использовать multiprocessing.cpu_count() количество пулов.Предоставление большего числа номеров затрудняет переключение контекста для процессора.Ознакомьтесь с темой переключение контекста , чтобы ознакомиться с ней.По сути, это означает, что если для ядра ЦП имеется более одного процесса, то ЦП должен переключаться между процессами, чтобы они казались параллельными.Даже если у вас 32 ядра ЦП, 300 - это слишком много, чтобы справиться с переключением контекста.Теперь вы можете найти место пота с понижением 300, но оно будет работать только для вашего ПК.Вот почему Pool использует multiprocessing.cpu_count() по умолчанию, поэтому я бы рекомендовал использовать это.

, если ваша find_max функция - легкая функция (это означает, что для запуска не требуется много ресурсов ЦП), торазветвление процесса будет намного дороже, чем его выполнение.В этом случае вы должны использовать обычный цикл для выполнения работы.

...