我已经用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。
答案 0 :(得分:0)
某个进程的CPU利用率百分比是该进程在特定内核上运行的次数的百分比。因此,如果某个进程的%cpu为40%,这的确切含义是该进程在此内核上运行40%的时间。
%CPU并不真正意味着内核本身已被利用40%,因为CPU时间采用时钟周期的形式,因此进程将是时钟周期,也可能不是,因此这是原子操作。 / p>
系统上的平均负载使您可以更好地利用实际内核,因此对于32核计算机,平均负载<32表示此时并非所有内核都在使用,并且没有进程在等待。
现在进入多处理,当您使用单个进程启动程序时,您将占用系统上整体CPU的40%的时间(请注意,系统上正在运行的其他进程合计会运行60%的时间)。但是,当您增加进程数时,则会增加程序在CPU上运行的次数的百分比。
所以是的,这是预期的行为,不仅是python多处理,这是计算机科学中多处理的一般行为。