IPython Parallel изменяет пустые строки на месте

Читая документацию к IPython Parallel, он говорит, что буферы копируются между ядрами. Тем не менее, это говорит о том, что с помощью track = True можно редактировать буферы на месте.

Следующий пример не работает для меня, даже с track = True:

import numpy as np
from IPython.parallel import Client

A = np.zeros((10,10), int)

rc = Client()
dview = rc[:]

def ptest(a):
    a[0] = 5

dview.track = True
r = dview.map_sync(ptest, A)
r.wait_for_send()

Он продолжает выдавать ошибку, что a недоступно для записи (назначение назначения доступнотолько для чтения).

Проблема, с которой я сталкиваюсь, заключается в том, что у меня очень большие трехмерные матрицы, и я хотел бы изменить их на месте. Моя идея состояла в том, чтобы использоватьmap -подобный подход для отправки отдельных 2D-срезов в кластеры и их измененияна месте.

Есть ли способ достичь этого с помощью IPython Parallel? Или практически невозможно отправить записываемые буферы, и единственный способ - собрать результаты из скопированных буферов?

Если это невозможно, есть ли способ с помощью IPython Notebook асинхронно получать результаты от ядер и обновлять их с помощью функции обратного вызова? Это псевдокод чего-то, что было бы хорошо. Есть ли что-нибудь подобное в IPython Parallel?:

def edit(a):
    a[0] = 5
    return a

def callback(i, a):
    A[i] = a

r = dview.map_async(edit, A, callback)
r.wait()

Идея вышеприведенного кода состоит в том, чтобы иметь функцию, которая возвращает измененныйrowsиз матрицы параллельно с обратным вызовом, который асинхронно обновляетrowsвыходного буфера (в текущей машине).

Другими словами, что-то подобное с IPython Parallel вместо многопроцессорной обработки будет работать.

0 ответов

Другие вопросы по тегам