В документации для concurrent.futures.ThreadPoolExecutor
говорится:
Изменено в версии 3.5: если max_workers равно
None
или не задано, по умолчанию будет указано количество процессоров на машине, умноженное на5
, при условии, что ThreadPoolExecutor часто используется для перекрытия ввода-вывода вместо работы ЦП и количество рабочих должно быть больше, чем количество рабочих для ProcessPoolExecutor.
Я хочу понять, почему значение max_workers
по умолчанию зависит от количества процессоров. Независимо от того, сколько у меня процессоров, в любой момент времени может работать только один поток Python.
Предположим, что каждый поток интенсивно использует операции ввода-вывода и проводит только 10 % своего времени в ЦП и 90 % своего времени в ожидании ввода-вывода. Предположим, что у нас есть 2 процессора. Мы можем запустить только 10 потоков, чтобы использовать ЦП на 100%. Мы больше не можем использовать ЦП, потому что в любой момент времени работает только один поток. Это справедливо даже при наличии 4 процессоров.
Так почему же значение по умолчанию max_workers
определяется количеством процессоров?
GIL
, но это деталь реализации. В других средах выполнения этой проблемы нет. - person Sraw   schedule 18.05.2019