使用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
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报