我在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。
进程的CPU利用率百分比是此进程在特定核心上运行的次数百分比。因此,如果进程的%cpu为40%,这意味着该进程在此核心上运行40%的时间。
%CPU实际上并不意味着核心本身的利用率为40%,因为CPU时间是以时钟周期的形式进行的,所以进程将是时钟周期还是不会,因此它是原子操作。
系统上的负载平均值可以更好地利用实际内核的数量,因此对于32核计算机,平均负载<32意味着此时并非所有内核都在使用,并且没有进程在等待。
现在进行多处理,当您使用单个进程启动程序时,您占用系统上的整体CPU的次数为40%(请注意,系统上运行的其他进程共运行60%)。但是,当您增加进程数时,您将增加程序在CPU上运行的次数的百分比。
所以这是预期的行为,它不仅仅是python多处理,这是计算机科学中多处理的一般行为。