#python #mpi #mpi4py
Вопрос:
У меня есть очередь, которую я хочу разделить между несколькими процессами, которые я запускаю при выполнении трудоемкой части моего кода. Я замечаю, что когда я передаю multiprocessing.Manager.Queue
объект функции, которую хочу вызвать, он просто застревает там, а затем завершает все процессы без вызова этой функции. Я также попытался передать Queue
объект, полученный из Python, но поведение невыполнения функции сохраняется. Мне интересно, есть ли Queue
объект, которым можно поделиться при запуске распараллеливания MPI?
Оператор «В функции» будет отображаться только в том случае, если я удален queue
из iterable
списка и из func
параметров. Это относится к Queue
многопроцессорной обработке Python и’.Менеджер.Очередь».
Кроме того, я не уверен, является ли MPI.Win.Lock()
это правильным подходом или нет. У меня не было возможности проверить его, так как он никогда туда не ходит.
import queue as q
from mpi4py.futures import MPIPoolExecutor
from mpi4py import MPI
def func(data, queue):
print("In func")
tmp = othe_function(data)
with MPI.Win.Lock():
print("in queue")
writer(queue, [g_indxs, sparse.csr_matrix(tmp)])
MPI.Win.Unlock()
#other stuff
queue = q.Queue()
iterable = [(data, queue) for i in unique_schaefer_labels]
with MPIPoolExecutor() as executor:
print(executor)
executor.starmap(func, iterable)
print("done")