В системе Linux, которую я использую, планировщик не очень щедр, давая время процессора для подпроцессов, порожденных из многопроцессорного модуля python. При использовании 4 субпроцессов на 4-ядерном компьютере я получаю около 22% процессора в соответствии с ps
. Однако, если подпроцессы являются дочерними процессами оболочки, а не программой python, она достигает почти 100% CPU. Но многопроцессорность - гораздо более приятный интерфейс, чем ручное разделение моих данных, и запуск отдельных программ python для каждого раскола, и было бы неплохо получить лучшее из обоих миров (организация кода и высокая загрузка процессора). Я попробовал установить привлекательность процессов на -20, но это не помогло.Изменения уровня операционной системы для ускорения многопроцессорности Python?
Мне интересно, может ли перекомпиляция ядра linux с некоторой опцией помочь планировщику предоставить больше процессорного времени для многопроцессорных рабочих процессов python. Может быть, есть соответствующий вариант конфигурации?
Точная версия я использую:
$ uname -a
Linux <hostname> 3.19.0-39-generiC#44~14.04.1-Ubuntu SMP Wed Dec 2 10:00:35 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
В случае, если это может быть связано с тем, как я использую мультипроцессирование, она имеет вид:
with Pool(4) as p:
p.map(function,data)
Update: Это не воспроизводимая проблема. Результаты, представленные здесь, были получены несколько дней назад, и я снова проверил тест, и процессы многопроцессорности были такими быстрыми, как я надеялся. Возможно, этот вопрос должен быть удален, было бы неплохо ввести в заблуждение людей о производительности, ожидаемой от multiprocessing
.
Вы уверены, что это ядро в вине? Эта проблема больше связана с тем, что Python не может выполнять задания по-настоящему параллельно. – 5gon12eder
Многопроцессорные рабочие являются собственными процессами с их собственными PID.Я понимаю, что делает процессы отличными друг от друга, как, например, от моего веб-браузера. – seewalker
Вы можете [легко] насыщать свою шину памяти (т. Е.), Вы связаны с памятью, а не вычисляете границы. Возможно, вы могли бы оценить или проверить, чтобы подтвердить. Посмотрите на/sys/devices/system/cpu/cpu */cpufreq и установите «производительность» –