Python multiprocessing 基础使用和小trick
最近进行数据预处理时(噪声插入),单进程严重影响实验周期,故学习了multiprocessing并发执行不同数据集的处理,加快执行效率。现于此进行一些简单记录以供日后参考。
1. 基础:
From multiprocessing import Pool # 引入进程池Pool
with Pool(20) as p: # 建立进程池p,其大小为20。
p.map(f, in_argv) # 将in_argv中的参数投入f中,执行函数f
解释一下p.map(f, in_argv),这个函数的作用即将f函数投入进程池p中进行执行,每个进程取一个in_argv作为shell的参数,然后开始执行。
所有的f返回值都会被返回到一个list中,即可以通过
p_l = p.map(f, in_argv) # p_l是个list 其中装有所有f的返回值 似乎是按着in_argv的顺序写入的?
来接收所有不同参数下的返回值。在有多个返回值时以一个tuple形式组织这些返回值
2. 小trick
(1) . 多参数输入
每次f中会取出in_argv这个list中的一个元素,这个元素可以是个tuple。所以将多个要输入的参数写进tuple中,再放入list传到函数中。函数从tuple中分别取各个参数即可。
即如:
in_argv= [(5, "test"), (6, "test"), (8, "test"), (10, "test"), (12, "test"), (5, "train"),
(6, "train"),(8, "train"), (10, "train"), (12, "train")]
解析时:
denominator = in_tuple[0] # 5,6,8,10,12
type= in_tuple[1] # test/train
(2) . 多函数种类
由于我对于不同目标的数据预处理写了不同的函数,一开始我尝试的是
with Pool(20) as p:
p.map(f, in_argv_f)
p.map(g, in_argv_g)
但是这种情况下,一定会先执行完 p.map(f, in_argv_f) 再执行 p.map(g, in_argv_g),即使in_argv_f中并没有20个参数。
所以就需要将f、g合并成一个函数,我选择的是写出一个shell函数
def shell(in_tuple):
if in_tuple in in_argv_f:
f(in_tuple)
else
g(in_tuple)
with Pool(20) as p:
p.map(shell, in_argv)
即可多函数种类地并行执行
(3) . 注意慢的放前面,快的放后面
不同的函数不同的输入都会导致运行效率的不同。为了整体的运行更快,应当在制作in_argv时将耗时高的尽量放在前面。例如较大的数据集,较大工作量的处理方式,都应该放前面优先执行。
(悄悄放张爽图)

Python multiprocessing 基础使用和小trick的更多相关文章
- Python基础知识(六)------小数据池,集合,深浅拷贝
Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : 一个文 ...
- Python(五)编程小实例
Python(五)编程小实例 抓取网页信息,并生成txt文件内容! Python抓取网页技能--Python抓取网页就是我们常看见的网络爬虫,我们今天所要用到的就是我们Python中自带的模块,用这些 ...
- Python 学习(1) 简单的小爬虫
最近抽空学了两天的Python,基础知识都看完了,正好想申请个联通日租卡,就花了2小时写了个小爬虫,爬一下联通日租卡的申请页面,看有没有好记一点的手机号~ 人工挑眼都挑花了. 用的IDE是PyCh ...
- python MultiProcessing模块进程间通信的解惑与回顾
这段时间沉迷MultiProcessing模块不能自拔,没办法,python的基础不太熟,因此就是在不断地遇到问题解决问题.之前学习asyncio模块学的一知半解,后来想起MultiProcessin ...
- 零基础学Python--------第2章 Python语言基础
第2章 Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...
- (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md
第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...
- 《Python》 代码块、小数据池和编码转换
一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 什么是代码块:一个py文件,一个函数,一个文件,一个类都是一个代码块. 作为交互方式输入的每一行 ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- Python入门基础学习 一
Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...
随机推荐
- Flume面试题整理
1.Flume使用场景(☆☆☆☆☆) 线上数据一般主要是落地(存储到磁盘)或者通过socket传输给另外一个系统,这种情况下,你很难推动线上应用或服务去修改接口,实现直接向kafka里写数据,这时候你 ...
- Ubuntu更换python版本
Ubuntu更换python版本 ubuntu服务器自带的python版本是python3.6,在运行jwt包时会有版本问题,所以安装和本地相同的python版本=>python3.7 安装py ...
- Python进阶(多线程)
多线程结构 import threading def worker():#子线程要执行的具体逻辑代码函数 print('threading') t1 = threading.current_threa ...
- zookeeper问题在公司可以 回到家用家里网不行 目前还没有解决
Opening socket connection to server 192.168.1.193/192.168.1.193:2181. Will not attempt to authentica ...
- vue + cesium开发(4) 绘制图形
在官方例子中每个图形都是一个entity,官方例子提供了显示正方形.圆形.锥形.图片等多种案例! // 初始花 var viewer = new Cesium.Viewer("cesiumC ...
- [bzoj1635]最高的牛
初始如果没有限制,很显然每一头牛高度都是h当只有一个限制,让h[a]到h[b]的高度都减1即可容易发现两个限制不会相交(否则必然矛盾),只会包含或相离,因此没有影响,直接差分/线段树即可(注意:1.不 ...
- Dirichlet 前缀和的几种版本
[模板]Dirichlet 前缀和 求 \[B[i] = \sum_{d|i} A[d] \] $ n \le 2\times 10^{7} $ 看代码: for( int i = 1 ; i < ...
- 洛谷 P4088 [USACO18FEB] Slingshot P(线段树+二维数点)
题目链接 题意:有一个数轴,上面有 \(n\) 个传送门,使用第 \(i\) 个传送门,你可以从 \(x_i\) 走到 \(y_i\),花费的时间为 \(t_i\) 秒.你的速度为 \(1\) 格/秒 ...
- FMT 和 子集卷积
FMT 和 子集卷积 FMT 给定数列 $ a_{0\dots 2^{k}-1} $ 求 $ b $ 满足 $ b_{s} = \sum_{i\in s} a_i $ 实现方法很简单, for( i ...
- 洛谷 P6478 - [NOI Online #2 提高组] 游戏(二项式反演+树形 dp)
题面传送门 没错这就是我 boom0 的那场 NOIOL 的 T3 一年前,我在 NOIOL #2 的赛场上折戟沉沙,一年后,我从倒下的地方爬起. 我成功了,我不再是从前那个我了 我们首先假设 A 拥 ...