Python并行编程(十三):进程池和mpi4py模块

 1、基本概念

      多进程库提供了Pool类来实现简单的多进程任务。Pool类有以下方法:

      - apply():直到得到结果之前一直阻塞。

      - apply_async():这是apply()方法的一个变体,返回的是一个result对象。这是一个异步的操作,在所有的子类执行之前不会锁住主进程。

      - map():这是内置的map函数的并行版本,在得到结果之前一直阻塞,此方法将可迭代的数据的每一个元素作为进程池的一个任务来执行。

      - map_async():这是map的一个变体,返回一个result对象。如果指定了回调函数,回调函数应该是callable的,并且只接受一个参数。当result准备好时,会自动调用回调函数,除非调用失败。回调函数应该立即完成,否则,持有result的进程将被阻塞。

 

2、测试用例

      创建四个进程池,然后使用map方法进行一个简单的计算。

复制代码
import multiprocessing  def function_square(data):     result = data * data     return result  if __name__ == "__main__":     inputs = list(range(100))     pool = multiprocessing.Pool(processes=4)     pool_outputs = pool.map(function_square, inputs)     pool.close()     pool.join()     print("pool: ", pool_outputs)
复制代码

      pool.map方法将一些独立的任务提交给进程池。pool.map和内置map的执行结果相同,但pool.map是通过多个并行进程计算的。

 

3、mpi4py模块

      Python提供了很多MPI模块写并行程序。其中mpi4py在MPI-1/2顶层构建,提供了面向对象的接口,紧跟C++绑定的MPI-2。MPI是C语言用户可以无需学习新的接口就可以使用这个库。

      此模块包含的主要的应用:

      - 点对点通讯

      - 集体通讯

      - 拓扑

4、安装mpi4py

      安装mpich:upload/201810231626348038.png" alt="" style="border: 0px; max-width: 900px; height: auto;" />

      将bin目录添加到系统环境中:

      

      用cmd输入并显示如下即为安装成功

      

      安装mpi4py

      pip install mpi4py

      MPI测试用例

复制代码
from mpi4py import MPI  def mpi_test(rank):     print("I am rank %s" %rank)   if __name__ == "__main__":      comm = MPI.COMM_WORLD     rank = comm.Get_rank()     mpi_test(rank)     print("Hello world from process", rank)
复制代码

      使用mpi运行文件

      

      在MPI中,并行程序中不同进程用一个非负整数来区别,如果我们有P个进程,那么rank会从0到P-1分配。

      MPI拿到rank的函数如下:rank = comm.Get_rank()

      这个函数返回调用它的进程的rank,comm叫做交流者,用于区别不同的进程集合:comm = MPI.COMM_WORLD

 5、MPI点对点通讯

      MPI提供的最实用的一个特性是点对点通讯。两个不同的进程之间可以通过点对点通讯交换数据:一个进程是接收者,一个进程是发送者。

      Python的mpi4py通过下面两个函数提供了点对点通讯功能:

      - Comm.Send(data, process_destination):通过它在交流组中的排名来区分发送给不同进程的数据。

      - Comm.Recv(process_source):接收来自源进程的数据,也是通过在交流组中的排名来分分的。

      Comm变量表示交流着,定义了可以互相通讯的进程组:

      comm  = MKPI.COMM_WORLD

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信