Высокая загрузка ЦП для высокопроизводительных серверов, использующих многопроцессорную работу с Python - PullRequest
0 голосов
/ 09 апреля 2019

Я написал код на python, который обрабатывает изображения и сохраняет результаты в базе данных Oracle. Сначала он извлекает идентификаторы изображений и, используя многопроцессорную библиотеку в Python, разделяет этот массив на порожденные процессы. Каждое изображение не зависит от остальных и может обрабатываться отдельно.

В настоящее время я выполняю этот код на сервере с 32 процессорами и создал только два процесса для параллельной работы. Я обнаружил, что загрузка процессора возросла до 70%. Запуск одного процесса устанавливает его примерно на 40%.

Есть ли объяснение использования ЦП в этой библиотеке?

Фрагмент кода:

import multiprocessing
import numpy as np
num_of_processes = 2
img_list = [1, 2, 3, 4, 5, 6]
process_list = []

split_img_lst = np.array_split(img_list, num_of_processes)

for i in range(num_of_processes):
    flat_list = [item for sublist in split_img_lst[i] for item in sublist]
    p = multiprocessing.Process(target = process_imgs, args = (flat_list, i))
    process_list.append(p)
    p.start()

for p in process_list:
    p.join()

Я ожидал, что для одного процесса загрузка будет составлять около 1/32 от мощности процессора.

1 Ответ

0 голосов
/ 09 апреля 2019

Процент использования ЦП для процесса - это процент времени, в течение которого этот процесс выполняется на конкретном ядре.Таким образом, если% cpu для процесса равен 40%, это означает, что этот процесс выполняется на этом ядре 40% раз.

% ЦП на самом деле не означает, что само ядро ​​используется на 40%, так как ЦПвремя имеет форму тактовых циклов, поэтому либо процесс будет тактовым, либо нет, поэтому это атомарная операция.

Среднее значение нагрузки в системе дает вам лучшее представление о том, насколько ваши действительные ядраТаким образом, для 32-ядерного компьютера средняя загрузка <32 означает, что в данный момент используются не все ядра, и процессы не ожидают. </p>

Теперь перейдем к многопроцессорности, когда вы запускаете программу содин процесс, вы занимаете весь ЦП в системе 40% раз (обратите внимание, что в системе выполняются другие процессы, которые в совокупности выполняются 60% раз).Однако, когда вы увеличиваете количество процессов, вы увеличиваете процент от того, сколько раз ваша программа будет работать на ЦП.

Так что да, это ожидаемое поведение, и это не только с многопроцессорной обработкой Python, этообщее поведение многопроцессорности в информатике.

...