Почему по умолчанию max_workers ThreadPoolExecutor выбирается на основе количества процессоров? - PullRequest
0 голосов
/ 18 мая 2019

Документация для concurrent.futures.ThreadPoolExecutor гласит:

Изменено в версии 3.5: Если max_workers равно None илине задано, по умолчанию будет установлено число процессоров на машине, умноженное на 5, при условии, что ThreadPoolExecutor часто используется для перекрытия операций ввода-вывода вместо работы ЦП, и число рабочих должно быть вышечем число рабочих для ProcessPoolExecutor .

Я хочу понять, почему значение max_workers по умолчанию зависит от количества процессоров.Независимо от того, сколько у меня процессоров, в любой момент времени может работать только один поток Python.

Предположим, что каждый поток требует интенсивного ввода-вывода и тратит только 10% своего времени на процессор и 90%.% времени ожидания ввода / вывода.Давайте тогда предположим, что у нас есть 2 процессора.Мы можем запустить только 10 потоков, чтобы использовать 100% ЦП.Мы больше не можем использовать процессор, потому что в любой момент времени работает только один поток.Это верно даже в том случае, если имеется 4 ЦП.

Так почему же значение по умолчанию max_workers определяется исходя из количества ЦП?

1 Ответ

0 голосов
/ 18 мая 2019

Гораздо проще проверить количество процессоров, чем проверить, насколько ограничен ввод-вывод вашей программы, особенно при запуске пула потоков, когда ваша программа еще не начала работать. На самом деле нет ничего, что лучше , чтобы основывать значение по умолчанию.

Кроме того, добавление по умолчанию было довольно незначительным , низким обсуждением изменением. (Раньше не было никакого значения по умолчанию.) Попытка придумать было бы намного больше работы.

Тем не менее, любитель может окупиться. Может быть, какая-то динамическая система, которая регулирует количество потоков в зависимости от нагрузки, поэтому вам не нужно выбирать количество в то время, когда у вас есть наименьшая информация. Однако этого не произойдет, если кто-то не напишет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...