#python #jupyter #ipython-parallel
#python #jupyter #ipython-параллельный
Вопрос:
Я запускаю довольно трудоемкое (> 3 дней) моделирование с использованием функции ipyparallel map, подобной той, что в Jupyter Notebook
from ipyparallel import Client
rc = Client()
lview = rc.load_balanced_view()
ar = lview.map(runsimulation, parameter)
и мне действительно нужны эти результаты. Но, к сожалению, один экземпляр умер из-за нехватки памяти. Теперь я больше не могу получить доступ к результату с помощью ar [i] . Есть ли шанс восстановить все остальные результаты, которые, безусловно, вычисляются (я вижу характерное потребление памяти и процессорного времени в мониторе узлов кластера).
У меня все еще есть объект ar в записной книжке Jupyter.
Ответ №1:
Вы можете получить частичные результаты для отдельных идентификаторов msg_id. С map каждое сообщение соответствует фрагменту карты (списку):
import ipyparallel as ipp
results = []
for msg_id in ar.msg_ids:
chunk_ar = rc.get_result(msg_id)
try:
chunk = chunk_ar.get()
except ipp.RemoteError as e:
print('ignoring error: %s' % e)
results.extend(chunk)
Ответ №2:
Для меня ответ, данный minrk, не сработал, потому что он уже не get_result
сработал.
Я немного изменил его, и это сработало для меня:
results = []
for msg_id in ar.msg_ids:
try:
chunk_ar = rc.get_result(msg_id)
chunk = chunk_ar.get()
except:
chunk = None
results.append(chunk)
Обратите внимание, что я добавляю None
, так что я получаю список равной длины в качестве входных данных.