J'essaie de transmettre une chaîne de texte contenant des informations sur la progression des processus de travail à root = 0. Je suis en utilisant comm.recv
, cependant, je ne peux pas recevoir la liste contenant le texte que j'obtiens l'erreur TypeError: expected a writeable buffer object
.Comment puis-je passer une chaîne de texte d'un processus de travail mpi4py à root = 0 pour écrire dans la sortie de texte
Le MWE Je suis en train de mettre en place est ci-dessous:
from mpi4py import MPI
from mpi4py.MPI import ANY_SOURCE
import numpy as np
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
data = []
recv_buffer = []
for i in range(0,10,1):
data = data + ["Logfile for iteration %s on rank %s" %(i,rank)]
print(rank)
print(data)
if rank == 0:
output = data[0]
for i in range(1, size):
comm.recv(recv_buffer,ANY_SOURCE)
output += recv_buffer[0]
else:
# all other process send their result
comm.send(data)
if rank == 0:
print(output)
Cela échoue à la ligne comm.recv(recv_buffer,ANY_SOURCE)
. recv_buffer
est pré-spécifié comme recv_buffer = []
. Comment puis-je rendre ceci inscriptible?
J'ai déjà regardé des tableaux 'numpy'. Mais je ne peux pas facilement recevoir du texte dans un tableau numpy. Pourquoi n'est-il pas possible de le faire avec une liste? 'data = []' semble être inscriptible dans mon exemple, donc je ne sais pas pourquoi cela n'est pas accessible en écriture pour 'recv_buffer'. – 218
J'ai mal lu votre question, s'il vous plaît voir ma réponse mise à jour. J'espère que cela aide. – Zulan
@ 218, notez que je suppose que vous voulez une liste de toutes les entrées de journal parmi tous les processus. Y at-il une raison pour que votre code utilise 'data [0]'? De cette façon, vous ne créerez qu'une chaîne contenant toutes les premières entrées de journal parmi les processus. – Zulan