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 psutil

import os

core_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()

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

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

相关文章

第二百六十九回

文章目录 概念介绍设置方法示例代码内容总结 我们在上一章回中介绍了Card Widget相关的内容,本章回中将介绍国际化设置.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的国际化设置是指在App设置相关操作,这样可以让不同国家的…

SAP PI之Rest adapter

一,简介 REST风格接口是以http为传输协议,以xml或json或text为有效负载。下图展示了REST到XI再返回的一个过程,一个REST接口包含的信息有:服务URL、URL中带的参数、http方法(post/get/put等)、http头部、body部分的有效载荷。而X…

2023年全球软件质量效能大会(QECon北京站):核心内容与学习收获(附大会核心PPT下载)

此次大会的主题为“智能时代的质量新篇章”。来自全球的软件质量与效能专家、企业领袖、技术研发人员等齐聚一堂,共同探讨软件质量与效能的新理念、新技术、新实践。 一、大会的核心内容 1、智能时代软件质量的新挑战与机遇 随着人工智能、大数据等技术的快速发展…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件,写入 module.exports {publicPath: ./, }

【SpringCloud】这一次终于使用MQ解决了Eureka服务下线延迟感知问题

前言 其实,“通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题”是一种解,但不是最优解 1.痛点 上一篇文章的标题是: 通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题 当时在文章的末尾就…

matlab 直道转向时方向盘最小转角算法

1、内容简介 略 33-可以交流、咨询、答疑 2、内容说明 汽车主动转向,直道转向时方向盘最小转角算法,一个m脚本和simulink的计算结果 略 3、仿真分析 略 4、参考论文 汽车主动转向关键技术研究

黑马程序员_多线程

基础知识 什么是线程 被包含在进程之中, 可以调度的最小单位应用软件中互相独立,可以同时运行的功能 什么是进程 程序的基本执行实体 总结: 什么是多线程? 有了多线程,可以让程序同时做多件事情 多线程有什么作用&…

DC电源模块在新能源领域的应用前景

BOSHIDA DC电源模块在新能源领域的应用前景 DC电源模块在新能源领域有着广阔的应用前景。随着可再生能源技术的发展和普及,如太阳能和风能等的应用逐渐增多,DC电源模块在这些领域的应用越来越重要。 首先,DC电源模块可以用于太阳能发电系统…

车载音频EMI的产生及典型音频功放AW836XX的解决方案

之前针对 eCall的文章中有提到D类音频功放需要关注EMI问题(点击文章回看《车载eCall系统音频应用解决方案》),在此展开此问题并寻求解决方案。 1. EMI定义与分类 电磁干扰(Electromagnetic Interference,EMI&#xff…

geemap学习笔记049:下载Landsat数据时遇到的一个问题

前言 最近在下载Landsat 8 地面反射率数据(Surface Reflectance)时,遇到了一个问题,无论是使用geemap.ee_export_image_to_drive() 函数还是geemap.download_ee_image() 函数下载的数据,易康都打不开,显示…

【CSDN博客系列】自定义模块

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

还在为crontab表达式发愁吗,快使用这个工具

是不是每次要定义cron表达式的时候,都去百度翻找资料,cron表达式难写难记真是苦天下程序员久已。有没有什么不拥记的办法就轻松掌握呢?最近发现这个CrontabGuru神器,强烈推荐,真是广大程序员的福音了。 简介 Crontab…

电脑技巧:安装手机与Win10电脑怎样互传文件,看完你就会了

目录 一、Windows网络邻居功能 二、数据线传输 三、蓝牙连接 大家在日常工作当中,会遇到需要实现手机和Win10电脑之间的文件传输,今天小编给大家推荐使用Win10系统自带的网络邻居功能来实现手机与电脑之间数据的传输,希望对大家日常办公提…

喜讯!无垠智能模糊测试系统入选“2023软件供应链优秀成果”

近日,中国信通院信息通信软件供应链安全社区正式公布了“2023软件供应链优秀成果”,其中,云起无垠的无垠智能模糊测试系统凭借其自主研发的创新成果,成功入选该名单。 图 获奖成果 自发起以来,软件供应链优秀成果案例…

html画动态桃心

html画动态桃心 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetwindows-1252"><title></title><style>* {padding: 0;margin…

从uptime看linux平均负载

从前遇到系统卡顿只会top。。top看不出来怎么搞呢&#xff1f; Linux系统提供了丰富的命令行工具&#xff0c;以帮助用户和系统管理员监控和分析系统性能。在这些工具中&#xff0c;uptime、mpstat和pidstat是非常有用的命令&#xff0c;它们可以帮助你理解系统的平均负载以及资…

电子行业除镍树脂深度出水0.02ppm

项目名称 电子行业贴片电容废水除镍项目 工艺选择 两级串联运行 工艺原理 亚氨基二乙酸和重金属离子通过螯合作用形成稳定的配位键&#xff0c;实现选择性吸附重金属 项目背景 贴片电容&#xff0c;也被称为多层片式陶瓷电容器&#xff08;MLCC&#xff09;&#xff0c;…

SQL Server Management Studio创建数据表

文章目录 一、建表注意事项1.1 数据类型1.2 建立数据表的基本SQL语法 二、实例说明2.1 创建数据表2.2 实例2 三、标识列和主键示例&#xff1a; 一、建表注意事项 1.1 数据类型 可以看这个去了解数据类型&#xff1a; 1.2 建立数据表的基本SQL语法 建立数据表的基本 SQL 语…

UDS诊断(ISO14229-1) 36服务

文章目录 功能简介应用场景请求和响应1、请求2、子功能3、肯定响应4、否定响应 NRC 判断优先级顺序报文示例1、下载数据到服务器 UDS中常用 NRC 功能简介 36服务&#xff0c;即 TransferData&#xff08;传输数据&#xff09;服务&#xff0c;客户端利用 TransferData&#xf…

十、Qt 操作PDF文件

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