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

时间:2019-04-09 06:40:49

标签: python python-multiprocessing cpu-usage

我已经用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。

1 个答案:

答案 0 :(得分:0)

某个进程的CPU利用率百分比是该进程在特定内核上运行的次数的百分比。因此,如果某个进程的%cpu为40%,这的确切含义是该进程在此内核上运行40%的时间。

%CPU并不真正意味着内核本身已被利用40%,因为CPU时间采用时钟周期的形式,因此进程将是时钟周期,也可能不是,因此这是原子操作。 / p>

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

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

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