使用 python multiprocessing 模块实现并行处理

multiprocessing是python标准库的一个模块,这里介绍用multiprocessing进行并行编程。

Process类

Process 是multiprocessing模块中最基本的类,看下面代码

Screen Shot 2015-11-29 at 12.55.49 PM

按特定顺序获得结果

输出的结果不一定和进程的执行顺序匹配。上面我们用的是.get()方法获取队列中的结果:进程执行完成的先后顺序决定了输出结果顺序。假设进程按顺序执行的输出结果为[‘yzQfA’, ‘PQpqM’, ‘SHZYV’, ‘PSNkD’],而第二个进程先执行完毕,则输出为[‘PQpqM’, ‘yzQfA’, ‘SHZYV’, ‘PSNkD’]。

如果要求输出顺序对应进程发起先后,我们可以修改为如下代码:

Screen Shot 2015-11-29 at 1.21.25 PM

进程执行完成顺序 1->0->2->3,进程发起顺序 0->1->2->3。对输出结果进行排序:

Screen Shot 2015-11-29 at 1.22.30 PM

简单的维持顺序方法是使用 Pool.apply 和 Pool.map 函数。

Pool 类

Pool 里有4个常用函数:

  • Pool.apply
  • Pool.map
  • Pool.apply_async
  • Pool.map_async

Pool.apply 和 Pool.map 和python内建的函数 apply 和 map 等同。

Pool.apply 和 Pool.map

Screen Shot 2015-11-29 at 1.40.36 PM

Pool.map 和 Pool.apply 将会锁住主进程直到所有进程结束,并且按顺序输出结果。
相反,async的变体函数在进程结束时立刻返回结果,而且需要用get方法获得结果。

Screen Shot 2015-11-29 at 1.49.29 PM

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注