python multiprocessing 中的那些 pools

Parallel programming is easy, as long as you don’t care about the performance.

为什么要用multiprocessing这个module

  1. 因为threading库是线性处理的,等于没有并行
  2. 有些计算处理工作很明显是重复劳动,甚至其元素顺序都不重要(比如:产生随机10个数返回其的相关计算结果)
  3. 没有时间将耗时部分用C/C++/Fortran重写,降低开发周期

缺陷

如果参数很多,很大,那么传递参数(pool的初始化)需要花费较长时间。

Pool: imap_unordered(func,arg,chunksize)

  1. func 可以是一个class的method (i.e. func=class.method)
  2. 作为imap,返回的是一个迭代器,可以给并行过程加进度条
  3. chunksize是指将整个任务分块处理时块的大小,每个process一次做chunksize个任务,全部处理完成后集中给迭代器输出(仍然是一个一个返回,而不是一次返回一个chunksize大小的list)。分配任务给process时也是以chunksize为单位分配。

实操验证(benchmarking)

假设某个计算任务要执行N=200次,使用计算机上的4个空闲的核。
我们将顺序(单核)执行的耗时作为Baseline: 205 s

chunksizeNN/4N/5N/8N/10N/20
imap_unordered225 s199 s174 s186s204 s281 s
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值