使用python多处理的高规格服务器的高CPU利用率

问题描述 投票:0回答:1

我在python中编写了代码来处理图像并将结果存储在Oracle数据库中。它首先提取图像的ID,并使用Python中的多处理库,将此数组拆分为生成的进程。每个图像独立于其余图像,可以单独处理。

我目前在具有32个处理器的服务器上运行此代码,并且只创建了两个并行运行的进程。我发现CPU利用率飙升了70%。运行单个进程将其设置为大约40%。

是否有关于此库的CPU利用率的解释?

代码段:

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()

我预计,对于一个进程,利用率将大约是CPU容量的1/32。

python python-multiprocessing cpu-usage
1个回答
0
投票

进程的CPU利用率百分比是此进程在特定核心上运行的次数百分比。因此,如果进程的%cpu为40%,这意味着该进程在此核心上运行40%的时间。

%CPU实际上并不意味着核心本身的利用率为40%,因为CPU时间是以时钟周期的形式进行的,所以进程将是时钟周期还是不会,因此它是原子操作。

系统上的负载平均值可以更好地利用实际内核的数量,因此对于32核计算机,平均负载<32意味着此时并非所有内核都在使用,并且没有进程在等待。

现在进行多处理,当您使用单个进程启动程序时,您占用系统上的整体CPU的次数为40%(请注意,系统上运行的其他进程共运行60%)。但是,当您增加进程数时,您将增加程序在CPU上运行的次数的百分比。

所以这是预期的行为,它不仅仅是python多处理,这是计算机科学中多处理的一般行为。

© www.soinside.com 2019 - 2024. All rights reserved.