返回

使用mpi4py的MPI python程序。期货MPIComExecutor()未完成执行

发布时间:2022-05-01 21:30:55 250
# node.js

我正试图用python编写一个简单的基于mpi的并行程序,使用mpi4py在一些工作进程池中异步分配一些作业,然后在它们全部完成后收集答案。我有以下python程序:

from mpi4py import MPI
from mpi4py.futures import MPICommExecutor
import math

def primefact(n):
     facts = [1]
     if n < 1:
          return []
     while n % 2 == 0: 
          facts.append(2) 
          n = n / 2
     for i in range(3,int(math.sqrt(n))+1,2): 
          while n % i== 0: 
               facts.append(i) 
               n = n / i 
     if n > 2: 
          facts.append(n)
     return facts

def test_primefact(nums):
     with MPICommExecutor(MPI.COMM_WORLD, root=0) as executor:
          if executor is None: 
               return
          jobs = [executor.submit(primefact,qq) for qq in nums]
          facts = [job.result() for job in jobs]
          for rslt in zip(nums,facts):
               print('{}: '.format(rslt[0]) + ', '.join([str(qq) for qq in rslt[1]]))

if __name__ == "__main__":
     nums = [qq for qq in range(1,201)]
     test_primefact(nums)

当我使用命令运行程序时mpiexec -n 4 ./mpitest.py,程序执行将无限期挂起。如果我按Ctrl-C发送终止信号,程序将打印所有输出(因此它在某个点进行计算;我不知道它在我发送终止信号之前还是之后进行了计算),但它不会返回命令提示符。如果我再次发送终止信号,我将返回命令提示符,但是mpiexec生成的进程仍将在后台运行,我必须手动杀死它们。我是否在某个地方漏掉了一行代码,让MPIComExecutor知道一切都已处理完毕,因此可以退出?就我所知,我没有做任何与这里和这里的例子有实质性区别的事情。

  • mpi4py 3.0.0
  • python 3.6
  • 英特尔(R)Linux*操作系统MPI库,2019版更新1版本20181016
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像