Python进程池multiprocessing.Pool

环境:

鲲鹏920:192核心
内存:756G
python:3.9

python单进程的耗时

在做单纯的cpu计算的场景,使用单进程核多进程的耗时做如下测试:
单进程情况下cpu的占用了如下,占用一半的核心数:
在这里插入图片描述

每一步和总耗时如下:
单进程耗时

多进程

cpu占用如下,每个进程基本占用48个左右核心数;
在这里插入图片描述
多进程的耗时如下:
每一个进程的耗时为63s左右,总的耗时比单进程还多,如果绑定48核心到每个进程,耗时更高。这是为何?
在这里插入图片描述
是否可以得出结论,在cpu计算密集的场景,单进程(每个任务都是独立的、排除IO、竞争关系)的效率会比多进程会高呢?
注:同样的代码在x86服务器上测试过,结论依旧是单进程耗时比多进程会少,这是为什么?

样例代码

from sklearn.datasets import load_wine
from sklearn.preprocessing import MinMaxScaler, Normalizer, StandardScaler, RobustScaler
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
import time
from multiprocessing import Process, Pool, current_process
import multiprocessing
import numpy as np
import os
import psutilimport oscore_count = os.cpu_count()
print(f"The CPU has {core_count} cores.")cpu_cores = [index for index in range(0, core_count)]def task1(data):start = time.time()X = np.random.rand(178, 13)y = np.random.randint(low=0, high=3, size=(178))X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=60)mm_scaler = MinMaxScaler()X_train = mm_scaler.fit_transform(X_train)X_test = mm_scaler.fit_transform(X_test)mlp = MLPClassifier(solver='lbfgs', hidden_layer_sizes=[500, 500], max_iter=300, random_state=60)mlp.fit(X_train, y_train)# print("***" * 10, "current data value:{}".format(data))# print("******************************************current processid:{} end id is {}".format(multiprocessing.current_process().name, data))print("this step spend time is {} seconds".format(time.time() - start))# time.sleep(5)def task(data):process = current_process()print(process)pid = os.getpid()index = process._identity[0]cores = cpu_cores[(index-1) * 48 : index * 48]# print("process:{}, pid:{}, index:{}, core:{}".format(process, pid, index, cores))p = psutil.Process(pid)  # 通过进程 ID 获取进程对象# p.cpu_affinity(cores)  # 绑定核心start = time.time()X = np.random.rand(178, 13)y = np.random.randint(low=0, high=3, size=(178))X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=60)mm_scaler = MinMaxScaler()X_train = mm_scaler.fit_transform(X_train)X_test = mm_scaler.fit_transform(X_test)mlp = MLPClassifier(solver='lbfgs', hidden_layer_sizes=[500, 500], max_iter=300, random_state=60)mlp.fit(X_train, y_train)print("this step spend time is {} seconds".format(time.time() - start))def main():data = [i for i in range(4)]start = time.time()for item in data:task1(item)print("single spend time is ", time.time() - start, " seconds")start = time.time()with Pool(4) as pool:pool.map_async(task, data)pool.close()pool.join()print("spend time is ", time.time() - start, " seconds")if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/409605.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】归并排序的两种实现方式与计数排序

前言:在前面我们讲了各种常见的排序,今天我们就来对排序部分收个尾,再来对归并排序通过递归和非递归的方法进行实现,与对计数排序进行简单的学习。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏…

c#异形窗体遮罩效果

c#异形窗体遮罩效果,移动,关闭,最大化,最小化,还原操作 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D…

在程序中链接静态库 和 动态库

9. 链接库 在编写程序的过程中,可能会用到一些系统提供的动态库或者自己制作出的动态库 或者静态库文件,cmake中也为我们提供了相关的加载动态库的命令hehedalinux:~/Linux/loveDBTeacher-v3$ tree . ├── CMakeLists.txt ├── include │ └── …

如何从 Keras 中的深度学习目录加载大型数据集

一、说明 数据集读取,使用、在磁盘上存储和构建图像数据集有一些约定,以便在训练和评估深度学习模型时能够快速高效地加载。本文介绍Keras 深度学习库中的ImageDataGenerator类等工具自动加载训练、测试和验证数据集。 二、ImageDataGenerator加载数据集…

中科院自动化所:基于关系图深度强化学习的机器人多目标包围问题新算法

摘要:中科院自动化所蒲志强教授团队,提出一种基于关系图的深度强化学习方法,应用于多目标避碰包围(MECA)问题,使用NOKOV度量动作捕捉系统获取多机器人位置信息,验证了方法的有效性和适应性。研究成果在2022年ICRA大会发…

【征服redis5】redis的Redisson客户端

目录 1 Redisson介绍 2. 与其他Java Redis客户端的比较 3.基本的配置与连接池 3.1 依赖和SDK 3.2 配置内容解析 4 实战案例:优雅的让Hash的某个Field过期 5 Redisson的强大功能 1 Redisson介绍 Redisson 最初由 GitHub 用户 “mrniko” 创建,并在…

RPA与通知机器人的完美结合

写在前面 在现代快节奏的工作环境中,我们经常会面临多个任务同时进行的情况,你还在为时间不够用、忙碌而惆怅吗?你还在为时刻盯着电脑流程而烦恼吗?你还在为及时收不到自己的自动化任务进度而焦躁吗?别担心&#xff0…

matlab快速入门(读取数据并绘制散点图和拉格朗日插值

目录 1.读取excel:2.注释快捷键:3.数组/矩阵索引:4.绘制散点图:5.拉格朗日插值:5.1分割出非空和空的x和y两组数据:5.2插值:5.3画图: 小结: 1.读取excel: [nu…

AI对决:ChatGPT与文心一言的比较

文章目录 引言ChatGPT与文心一言的比较Chatgpt的看法文心一言的看法Copilot的观点chatgpt4.0的回答 模型的自我评价自我评价 ChatGPT的优势在这里插入图片描述 文心一言的优势AI技术发展趋势总结 引言 在过去的几年里,人工智能(AI)技术取得了…

十、Qt 操作PDF文件

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …

Jenkins集成Sonar Qube

下载插件 重启Jenkins 容器 sonarqube 使用令牌 Jenkins 配置 重新构建

部署SD-WAN需要哪些设备和软件?

企业网络需求不断增加,越来越多的企业选择采用SD-WAN组网以提升网络性能和管理效率。在部署SD-WAN组网专线时,需要一系列特定的设备和软件来支持和管理网络。本文将对这些设备和软件进行详细介绍。 SD-WAN控制器: SD-WAN控制器是SD-WAN组网的…