2015-09-08 4 views
1

Я хочу использовать многопроцессорную обработку для распространения работы через несколько ядер системы. В рамках работы они будут работать subprocess.call(..., shell=True). Что происходит, когда они это делают? Поддерживает ли подпроцесс fork это ядро?Как взаимодействуют пакеты подпроцесса и многопроцессорности Python?

+0

Вы попробовали? Обычно ОС выполняет новые процессы. – poke

+0

Наверное, нет. Обычно вам нужно явно привязывать процессы к ядру. Способ для этого зависит от ОС. –

ответ

2

Если основная работа выполняется в дочерних процессах, созданных с использованием модуля subprocess, тогда вам не нужно multiprocessing, чтобы распространить работу на несколько ядер процессора. См. Python threading multiple bash subprocesses?

Что происходит, когда они это делают?

subprocess.call() выполняет внешнюю команду и ждет ее завершения. Не имеет значения, запущен ли он внутри рабочего процесса, созданного модулем multiprocessing, или нет.

Остается ли подпроцесс fork на этом ядре?

Если вам это необходимо; вы должны явно указать аффинность процессора. psutil provides a portable way to set/get CPU affinity for a process.

Если вы используете numpy, это может повлиять на сродство к процессору. См. Why does multiprocessing use only a single core after I import numpy?

+0

Спасибо за детали. – user592419

Смежные вопросы