Отправка и получение определенных частей mpi

У меня проблема с моим кодом. Я хочу, чтобы этот код отправлял элементы массива определенным работникам. Рабочие 0-7 должны получить 12, 18, 30, 36, 48, 54, 66, 72. Поэтому я использовал отправку и получение, чтобы сделать это, но когда я выполняю свой код, я просто получаю часть 66, а не 72. Так вот одного не хватает и он не запускается с 0. Может вы мне поможете.

Вот мой код:

import numpy as np
import pandas as pd
from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

a=np.random.rand(336,1) #array
sizedarray=[]
starting_point=0
ending_point=12
sizes=[]
q=[]
if rank == 0:#masterrrank
    for i in range(0,size-1):
    
        take_out=0
        sizedarray.append(a[starting_point:ending_point])
        starting_point=ending_point
        if i % 2 == 0:
            ending_point= ending_point + len(sizedarray[i]) + 6
            sizes.append(len(sizedarray[i]))

            
        elif i % 2 !=0:
            
            ending_point=len(sizedarray[i]) +12+ ending_point
            sizes.append(len(sizedarray[i]))
        
        comm.send(a[take_out:sizes[i]+take_out],dest=i+1)
        take_out=take_out+sizes[i]    


else:  
    p=comm.recv(source=0)
    
    print(len(p),"    ", rank)

и мой результат:

48      5
36      4
54      6
30      3
12      1
18      2
66      7
 

person Thorte    schedule 14.05.2020    source источник
comment
Worker 0 не отправляет и не получает сообщения самому себе.   -  person Gilles Gouaillardet    schedule 14.05.2020
comment
Да, я так и думал, есть ли способ отправить его самому себе?   -  person Thorte    schedule 14.05.2020
comment
один из вариантов - не отправлять его, а просто p=a[take_out:sizes[i]+take_out]. если вы хотите отправить его, остерегайтесь взаимоблокировки; вы можете использовать sendrecv() или неблокирующие isend() и/или irecv()wait() для выполнения запроса).   -  person Gilles Gouaillardet    schedule 14.05.2020
comment
Спасибо за подсказку, это то, что я искал   -  person Thorte    schedule 14.05.2020
comment
Между прочим, ваша программа представляет собой хрестоматийную реализацию scatterv()   -  person Gilles Gouaillardet    schedule 14.05.2020
comment
scatterv работает с python?   -  person Thorte    schedule 14.05.2020
comment
я надеюсь на это, проверьте stackoverflow.com/questions/39329492/   -  person Gilles Gouaillardet    schedule 14.05.2020
comment
Если я не отправлю его, не каждый рабочий получит определенный размер, верно?   -  person Thorte    schedule 14.05.2020
comment
Давайте продолжим обсуждение в чате.   -  person Thorte    schedule 14.05.2020