并行化——multiprocessing

multiprocessing是Python的标准模块,它既可以用来编写多进程,也可以用来编写多线程。multiprocessing.dummy实现多线程,multiprocessing实现多进程,本文主要介绍多进程的用法。

问题

最近在处理疾病数据时,遇到这样一个问题,需要计算同构的2000个文档加和平均值,为提高处理效率,使用multiprocessing库进行并行化,在此记录下。

用法

multiprocessing.pool能自动管理进程任务,通过下面的语句初始化有10个进程数的pool,若Pool()未指定进程数,那么使用os.cpu_count()返回的数量。

1
2
3
from multiprocessing import Pool
processNum = 10
p = Pool(processNum)

假定我们需要并行执行的任务是如下函数:

1
2
3
def func(parameter):
# do something
return result

主函数调用:

1
2
3
4
results = []
for i in range(processNum):
result = p.apply_async(func, args=(i,))
results.append(result)

p.apply_async采用异步方式调用函数func,p.apply采用同步方式调用,即串行方式,下一个func要等待上一个func运行完成才开始运行。针对我的问题,只需要异步操作即可。
最后,使用以下语句回收进程池:

1
2
p.close()
p.join()

附上完成使用代码

1
2
3
4
5
6
7
8
9
10
11
12
from multiprocessing import Pool
processNum = 10
p = Pool(processNum)
def func(parameter):
# do something
return result
results = []
for i in range(processNum):
result = p.apply_async(func, args=(i,))
results.append(result)
p.close()
p.join()
分享