Примечание: Я «засыпал» в землю multiprocessing
2 дня назад. Поэтому мое понимание очень простое.Многопроцессорность: больше процессов, чем cpu.count
Я пишу и приложение для загрузки в amazon s3
ведра. В случае, если размер файла больше (100mb
), Ive реализовал параллельные загрузки с использованием pool
с модуля multiprocessing
. Я использую машину с core i7
, у меня был cpu_count
от 8
. У меня создалось впечатление, что если я делаю pool = Pool(process = 6)
, я использую 6
ядра, и файл начинает загружаться по частям, и загрузка для первых 6 частей начинается одновременно. Чтобы узнать, что произойдет, когда process
больше, чем cpu_count
, я ввел 20 (подразумевая, что я хочу использовать 20 ядер). К моему удивлению, вместо того, чтобы получить блок ошибок, программа начала загружать 20 частей одновременно (я использовал меньший chunk size
, чтобы убедиться, что есть много частей). Я не понимаю этого поведения. У меня есть только 8
ядер, так как он не может принять программу ввода 20? Когда я говорю process=6
, действительно ли он использует 6 потоков? Который может быть единственным объяснением того, что 20 является допустимым вводом, так как может быть 1000 нитей. Может кто-нибудь, пожалуйста, объясните это мне.
Edit:
I 'заимствованы' код из here. Я немного изменил его, когда я попросил пользователя использовать его для основного использования вместо того, чтобы устанавливать parallel_processes
на 4
Вы смешиваете нити, процессы и ядра. Все это очень разные вещи. если вы установите 'процессы = 6', он будет использовать только 6 ** процессов **, которые могут запускаться каждый на одном ядре, или они могут запускать все на одном ядре - это зависит от ОС и загрузки системы. Что касается «вопроса» - укажите код. –