最近进行数据预处理时(噪声插入),单进程严重影响实验周期,故学习了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的更多相关文章

  1. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  2. Python(五)编程小实例

    Python(五)编程小实例 抓取网页信息,并生成txt文件内容! Python抓取网页技能--Python抓取网页就是我们常看见的网络爬虫,我们今天所要用到的就是我们Python中自带的模块,用这些 ...

  3. Python 学习(1) 简单的小爬虫

    最近抽空学了两天的Python,基础知识都看完了,正好想申请个联通日租卡,就花了2小时写了个小爬虫,爬一下联通日租卡的申请页面,看有没有好记一点的手机号~   人工挑眼都挑花了. 用的IDE是PyCh ...

  4. python MultiProcessing模块进程间通信的解惑与回顾

    这段时间沉迷MultiProcessing模块不能自拔,没办法,python的基础不太熟,因此就是在不断地遇到问题解决问题.之前学习asyncio模块学的一知半解,后来想起MultiProcessin ...

  5. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  6. (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  7. 《Python》 代码块、小数据池和编码转换

    一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 什么是代码块:一个py文件,一个函数,一个文件,一个类都是一个代码块. 作为交互方式输入的每一行 ...

  8. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  9. Python入门基础学习 一

    Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...

随机推荐

  1. Django笔记&教程 2-2 URL详细匹配规则

    Django 自学笔记兼学习教程第2章第2节--URL详细匹配规则 点击查看教程总目录 本章第一节中我们简单介绍了URL与View关系 简单概括来说,网页请求的url会通过urls.py里面的urlp ...

  2. 菜鸡的Java笔记 第二十九 - java 单例设计模式

    SingleCase 单例设计模式        1.单例设计模式的特点        2.多例设计模式的特点    内容    单例设计模式        现在如果说有这么一个程序类 class S ...

  3. SpringCloud微服务实战——搭建企业级开发框架(十九):Gateway使用knife4j聚合微服务文档

      本章介绍Spring Cloud Gateway网关如何集成knife4j,通过网关聚合所有的Swagger微服务文档 1.gitegg-gateway中引入knife4j依赖,如果没有后端代码编 ...

  4. 会话Cookie与session的关系

    在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用session和客户端之间进行通信,以及jsessionId是怎么回事,这并没有一个完整和正 ...

  5. [loj6118]鬼牌

    枚举最终所有牌的大小$i$,对于最终所有牌大小都为$i$的情况,令其贡献为步数,否则令其贡献为0,记$F$为期望贡献(即所有情况概率*贡献之和),答案即为$\sum_{i=1}^{m}F$ 显然,$F ...

  6. 八、hive3.1.2 安装及其配置(本地模式和远程模式)

    目录 前文 hive3.1.2 安装及其配置(本地模式和远程模式) 1.下载hive包 2.修改其环境变量 3.MySQL配置 Centos7 MySQL安装步骤: 1.设置MySQL源 2.安装My ...

  7. 三、MapReduce编程实例

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS MapReduce编程实例 @ 目录 前文 MapReduce编程实例 前言 注意 ...

  8. Python描述符以及Property方法的实现原理

    Python描述符以及Property方法的实现原理 描述符的定义: 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实了__get__(),__set__(),__delete__()中 ...

  9. Pickle的简单用法

    Python中pickle的用法 pickle存在的意义 在python的文件操作里面,我们常常需要将python容器里面的一些东西把它写成一个二进制文件存放在硬盘里面来永久保存. 在不借助pickl ...

  10. Codeforces 1067D - Computer Game(矩阵快速幂+斜率优化)

    Codeforces 题面传送门 & 洛谷题面传送门 好题. 首先显然我们如果在某一次游戏中升级,那么在接下来的游戏中我们一定会一直打 \(b_jp_j\) 最大的游戏 \(j\),因为这样得 ...