利用multiprocessing实现多线程,并实现多个参数传递函数的多并行

news2024/12/22 22:23:35

bbe1b76b17dbcef96f8fa079657aafc7.png

前言

利用多线程一般来说都是有 一定的大数据需求。

比如一个函数可能被不断的调用很多次

一般来说我们会使用for循环,但是为了节省时间,我们采用多线程的方式来解决这个问题

show you code

单参数输入

举了两个例子,一看便知 func为我们的函数 输入的参数为一个list,每一个元素对应于一个输入,每个输入并行

  • map 直接返回一个list

  • 如果需要每个结果做不一样的结果操作,需要迭代器,那就用imap

6fd49afc899ce911ab72bb29af56f747.png

代码

import multiprocessing

def func(x):
    return pow(x, 3)

cores = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=cores)

x = [1, 4, 7]

print(pool.map(func, x))
for yi in pool.imap(func, x):
    print(yi)
    print('woniuche')
    
pool.close()
pool.join()

多参数输入

这里用multiprocessing是不可行的 这里我们采用其他的包来实现 直接show code

62d25ea3ebbb07689c0ccdb86af3958a.png

代码:

from pathos.multiprocessing import ProcessingPool as newpool
from pathos import multiprocessing

cores = multiprocessing.cpu_count()
pool = newpool(processes=cores)


def func(x, y):
    return x+y

x = [1, 3, 5]
y = [0, 7, 2]

print(pool.map(func, x, y))

for yi in pool.imap(func, x, y):
    print(yi)
    print('woniuche')
    
pool.close()
pool.join()

在类中使用的问题

会出现一些非序列化的问题,这里不太好举例,自己写的代码也不好公开,所以这边先留个坑,直接写可能出现问题和解决方案

问题

  • python多线程报错:AttributeError: Can't pickle local object问题

  • not serializable 不可序列化等问题

具体解决方法

  • 直接把这个函数放在class外面,所有的参数都用传递进来的形式

  • https://cloud.tencent.com/developer/article/1730760

参考:

  • https://zhuanlan.zhihu.com/p/24311810

  • https://www.jianshu.com/p/06c6b553053f

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

30cc8cbf5a21a53a587e1d45a7806610.jpeg

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索MongoDB的奥秘:基本命令使用入门指南

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: 探索MongoDB的奥秘:基本命令使用入门指南 ⏱️ 创作时间&a…

世界算力简史(下)

世界算力简史(上) 世界算力简史(中) 今天终于要完结了…… █ 1980-1990:PC时代 IBM-PC和“兼容机” 上一篇,我们说到,70年代微处理器崛起,使得个人电脑开始大量出现。 这种情况&…

山东布谷科技直播程序源码使用Redis进行服务器横向扩展

当今,直播程序源码平台作为新媒体时代主流,受到了世界各地人民的喜爱,这也使得直播程序源码平台用户数量的庞大,也难免会出现大量用户同时访问服务器,使服务器过载的情况,当服务器承受不住的时候&#xff0…

进程的创建

进程创建时发生了什么 回顾上节关于存储空间分配的图片: 当程序运行到 fork() 函数了之后: 在早期的Linux中,系统会将fork之前所有的数据段,代码段,堆,栈等对应的全部的存储空间拷贝一份,作为…

保姆级教程:从0到1搭建Stable Diffusion XL完整工作流进行AI绘画

Rocky Ding 公众号:WeThinkIn 写在前面 【人人都是算法专家】栏目专注于分享Rocky在AI行业中对业务/竞赛/研究/产品维度的思考与感悟。欢迎大家一起交流学习💪 大家好,我是Rocky。 之前Rocky详细介绍了Stable Diffusion(SD&#…

Scala(第一章Scala入门)

文章目录 1.1 概述 1.1.1 为什么学习Scala1.1.2 Scala发展历史1.1.3 Scala和Java关系1.1.4 Scala语言特点 1.2 Scala环境搭建1.3 Scala插件安装1.4 HelloWorld案例 1.4.1 创建IDEA项目工程1.4.2 class和object说明1.4.3 Scala程序反编译 1.5 关联Scala源码1.6官方编程指南 1.1…

Arch Linux 使用桥接模式上网

如果我们想要将虚拟机与物理主机同一网段,并且像物理机器一样被其他设备访问,则需要以桥接模式上网,这个时候,物理主机就必须配置为使用网桥上网了。 注意:这里我们使用了 NetworkManager 网络管理工具中的 nmcli 来进…

File 类和 InputStream, OutputStream 的用法总结

目录 一、File 类 1.File类属性 2.构造方法 3.普通方法 二、InputStream 1.方法 2.FileInputStream 三、OutputStream 1.方法 2.FileOutputStream 四、针对字符流对象进行读写操作 一、File 类 1.File类属性 修饰符及类型属性说明static StringpathSeparator依赖于系统的路…

【T3】金蝶kis凭证数据转换到畅捷通T3软件中。

【问题需求】 将金蝶软件中的账套转换到畅捷通T3软件中。 由于金蝶老版本使用的是非sql server数据库。 进而需要将其数据导入到sql中,在转换到T3。 【转换环境】 金蝶中数据:凭证;科目无项目核算。 1、金蝶的数据文件后缀为.AIS; 2、安装office2003全版软件; 3、安装sq…

SpringBoot3文件管理

标签:上传.下载.Excel.导入.导出; 一、简介 在项目中,文件管理是常见的复杂功能; 首先文件的类型比较多样,处理起来比较复杂,其次文件涉及大量的IO操作,容易引发内存溢出; 不同的…

Codeforces Round 890 (Div. 2) C. To Become Max(二分 补写法 二分套二分)

题目 给定一个长度为n(n<1e3)的数组&#xff0c; 在一次操作里&#xff0c;你可以选择一个满足a[i]<a[i1]的下标i(1<i<n-1)&#xff0c;对a[i]加一 问&#xff0c;你最多操作k次的情况下&#xff0c;数组的最大值是多少&#xff0c;输出最大值 思路来源 Submi…

【C++精华铺】5.C++类和对象(中)类的六个默认成员函数

目录 1. 六个默认成员函数 2. 构造函数 2.1 概念 2.2 默认构造 2.2.1 系统生成的默认构造 2.2.2 自定义默认构造函数 2.3 构造函数的重载 3. 析构函数 3.1 概念 3.2 系统生成的析构函数 3.3 自定义析构函数 4. 拷贝构造 4.1 概念 4.2 默认生成的拷贝构造&#xff08;浅…

解锁滴滴ES的性能潜力:JDK 17和ZGC的升级之路

前文介绍了滴滴自研的ES强一致性多活是如何实现的&#xff0c;其中也提到为了提升查询性能和解决查询毛刺问题&#xff0c;滴滴ES原地升级JDK17和ZGC&#xff0c;在这个过程中我们遇到了哪些问题&#xff0c;怎样解决的&#xff0c;以及最终上线效果如何&#xff0c;这篇文章就…

云计算技术——多GPU渲染的云渲染服务

多GPU渲染的云渲染服务&#xff0c;是一种利用云计算技术&#xff0c;将多个图形处理器&#xff08;GPU&#xff09;集成在一起&#xff0c;为用户提供高效、便捷、低成本的渲染解决方案的服务。本文将从多GPU渲染的概念、优势、应用场景&#xff0c;云渲染服务的特点、优势&am…

【C++】初阶 --- 内联函数(inline)

文章目录 &#x1f95e;内联函数&#x1f35f;1、C语言实现"宏函数"&#x1f35f;2、内联函数的概念&#x1f35f;3、内联函数的特性&#x1f35f;4、总结 &#x1f95e;内联函数 &#x1f35f;1、C语言实现"宏函数" &#x1f970;用C语言先来实现普通的…

并发——volatile 关键字

文章目录 1. CPU 缓存模型2. 讲一下 JMM(Java 内存模型)3. 并发编程的三个重要特性4. 说说 synchronized 关键字和 volatile 关键字的区别 我们先要从 CPU 缓存模型 说起&#xff01; 1. CPU 缓存模型 为什么要弄一个 CPU 高速缓存呢&#xff1f; 类比我们开发网站后台系统使…

分布式 - 服务器Nginx:一小时入门系列之静态网页配置

文章目录 1. 静态文件配置2. nginx listen 命令解析3. nginx server_name 命令解析4. nginx server 端口重复5. nginx location 命令 1. 静态文件配置 在 /home 文件下配置一个静态的AdminLTE后台管理系统&#xff1a; [rootnginx-dev conf.d]# cd /home [rootnginx-dev home…

flutter项目给安卓打正式包 和升级版本号

1.首先把flutter项目里的android目录整个拖进android studo里,运行一下看看是否能运行 2.Build->Generate Signed Bundle/APK… 点击APK->Next 如果没有key酒店及Create new…就生成新的key 点击Key store path:右边的图标选择保存路径 选择保存的路径,并且在Save…

【雕爷学编程】Arduino动手做(01)---干簧管传感器模块4

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

logo一键生成的操作,没有设计经验也无妨

您可能会担心&#xff0c;没有设计经验如何设计一个独特而专业的标志&#xff08;Logo&#xff09;。但是&#xff0c;随着技术的进步&#xff0c;现在有许多一键生成操作的设计工具可供使用&#xff0c;使人们更容易创建自己的Logo。 什么是一键生成操作&#xff1f; 一键生成…