Python进程池multiprocessing.Pool

news/2024/2/23 14:20:16/文章来源:https://blog.csdn.net/weixin_50005386/article/details/135628806

环境:

鲲鹏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.luyixian.cn/news_show_926185.aspx

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

相关文章

git 提炼笔记

1、设置用户名和邮箱(邮箱可以不是真的) git config --global user.name test101 // 设置用户名为 test101git config --global user.email test101test101.cn // 设置邮箱为test101test101.cn2、查看用户名和邮箱 git config --global user.name git…

【SpringBoot框架篇】35.kafka环境搭建和收发消息

kafka环境搭建 kafka依赖java环境,如果没有则需要安装jdk yum install java-1.8.0-openjdk* -y1.下载安装kafka kafka3.0版本后默认自带了zookeeper,3.0之前的版本需要单独再安装zookeeper,我使用的最新的3.6.1版本。 cd /usr/local wget https://dlcdn.apache.…

Redis主从架构、哨兵集群原理实战

1.主从架构简介 背景 单机部署简单,但是可靠性低,且不能很好利用CPU多核处理能力生产环境必须要保证高可用,一般不可能单机部署读写分离是可用性要求不高、性能要求较高、数据规模小的情况 目标 读写分离,扩展主节点的读能力&…

canvas绘制美队盾牌

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

STC8H8K蓝牙智能巡线小车——1. 环境搭建(基于RTX51操作系统)

1. 基本介绍 开发环境准备:Keil uVision5 烧录软件:STC-ISP(V6.92A) 芯片: STC8H8K64U-45I-LQFP64 芯片引脚: 2.创建项目 打开Keil,点击【Project】,选择【new uVersion proje…

快乐学Python,如何使用爬虫从网页中提取感兴趣的内容?

前面的内容,我们了解了使用urllib3和selenium来下载网页,但下载下来的是整个网页的内容,那我们又怎么从下载下来的网页中提取我们自己感兴趣的内容呢?这里就需要Python的另一个库来实现-BeautifulSoup。 BeautifulSoup 是一个 Py…

数据仓库(2)-认识数仓

1、数据仓库是什么 数据仓库 ,由数据仓库之父比尔恩门(Bill Inmon)于1990年提出,主要功能仍是将组织透过资讯系统之联机事务处理(OLTP)经年累月所累积的大量资料,透过数据仓库理论所特有的资料储存架构,做…

可以在微信群里使用midjourney,gpt4,gemini,文心一言4.0,且免费

免费使用gpt4和midjourney 免费使用 参考链接: https://chat.xutongbao.top/

【银行测试】银行项目,信用卡业务测试+常问面试(三)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行测试-信用卡业…

轻松识别Midjourney等AI生成图片,开源GenImage

AIGC时代,人人都可以使用Midjourney、Stable Diffusion等AI产品生成高质量图片,其逼真程度肉眼难以区分真假。这种虚假照片有时会对社会产生不良影响,例如,生成公众人物不雅图片用于散播谣言;合成虚假图片用于金融欺诈…

Angular系列教程之DOM操作

文章目录 引言1. ElementRef2. Renderer23. ViewChild结论 引言 在Angular中,DOM操作是开发Web应用程序的一个重要方面。通过对DOM进行操作,我们可以动态地修改页面内容、样式和元素行为。本文将详细介绍如何在Angular中进行DOM操作,并提供相…

从数据可视化到场景渲染:山海鲸的创新与实践

作为山海鲸的开发者,我们深知可视化模型场景渲染在数据分析和决策支持中的重要作用。因此在保证山海鲸可视化软件免费编辑、分享、部署的同时也在场景渲染方面不断优化,本文将介绍山海鲸在可视化模型场景渲染方面的技术革新与实践探索。 首先&#xff0…

【STM32】STM32学习笔记-USART串口数据包(28)

00. 目录 文章目录 00. 目录01. 串口简介02. HEX数据包03. 文本数据包04. HEX数据包接收05. 文本数据包接收06. 预留07. 附录 01. 串口简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持…

Go并发快速入门:Goroutine

Go并发:Goroutine 1.并发基础概念:进程、线程、协程 (1) 进程 可以比作食材加工的一系列动作 进程就是程序在操作系统中的一次执行过程,是由系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程…

unity面试题

一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。 二:Unity3d中的碰…

汽车线束的汽配企业MES管理系统解决方案

随着科技的飞速发展和环保需求的日益提升,新能源汽车在全球范围内崭露头角,成为未来出行的主导力量。在这股浪潮中,中国凭借其强大的研发实力和市场敏锐度,迅速崛起为新能源汽车领域的佼佼者。而作为汽车数字化控制与智能化应用的…

Excel地址

解题思路: 根据题中歪歪和笨笨的话可以有两种解法。 1.输入的数为多大,则循环1多少次,当值为27时就要进行进位操作。这时要分情况讨论。 当集合中元素为一个时,如26,则需要变为1 1,集合元素个数加一。 当…

Maven 依赖传递和冲突、继承和聚合

一、依赖传递和冲突 1.1 Maven 依赖传递特性 1.1.1 概念 假如有三个 Maven 项目 A、B 和 C,其中项目 A 依赖 B,项目 B 依赖 C。那么我们可以说 A 依赖 C。也就是说,依赖的关系为:A—>B—>C, 那么我们执行项目 …

IC验证——perl脚本ccode_standard——c代码寄存器配置标准化

目录 1 脚本名称 2 脚本路径 3 脚本参数说明 4 脚本操作说明 5 脚本代码 1 脚本名称 ccode_standard 2 脚本路径 /scripts/bin/ccode_standard 3 脚本参数说明 次序 参数名 说明 1 address (./rfdig;.;..;./boot) 指定脚本执行路…

ES高级查询

ES中提供了一种强大的检索数据方式,这种检索方式称为Query DSL,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 1.常见查询 1.1查询所有[match_all] match_all关键字:返回索引中的全部文档。 GET /products/_search { &…