1
我有一個小型測試代碼,充當任務服務器場,主進程將任務發送給從服務器。獲取主要在任務服務器場中工作
我想知道是否有一種簡單的方法,使主人從任務列表中分享工作。例如使用發送和接收來自主人自己,但我不確定這是否會完成乾淨。
的代碼如下:
###!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys
import os
import time
comm=MPI.COMM_WORLD
rank=comm.Get_rank()
size = comm.Get_size()
#print(rank,size)
if rank == 0:
tasks=([StopIteration] * (size-1))+[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
status=MPI.Status()
while tasks:
comm.recv(source=MPI.ANY_SOURCE, status=status)
data=tasks.pop()
print("master sending data ",data," to rank", status.Get_source())
comm.send(obj=data, dest=status.Get_source())
print("master: done send. Data left: ",tasks)
else:
print("slave", rank," entering loop")
for task in iter(lambda: comm.sendrecv(dest=0), StopIteration):
print("slave ", rank," recvd data", task)
print("slave ", rank," going to sleep")
time.sleep((task+0.5)*2*1.4)
任何亮建議,歡迎!
由於
它要麼需要在主一個單獨的線程或一個非常複雜的邏輯,與結合了計算非阻塞消息。最簡單的解決方案是隻啓動一個MPI進程,並指示MPI運行時將該進程置於與主控級別相同的主機上。 –