首页 技术 正文
技术 2022年11月21日
0 收藏 869 点赞 4,450 浏览 1233 个字

最近进行数据预处理时(噪声插入),单进程严重影响实验周期,故学习了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开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,581
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918