繁体   English   中英

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

[英]High CPU utilization for high specs server using python multiprocessing

我在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多处理,这是计算机科学中多处理的一般行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM