如果单个评估失败,则从ipyparallel映射中恢复值

时间:2016-10-17 12:02:19

标签: python jupyter ipython-parallel

我使用ipyparallel的地图函数进行了非常耗时(> 3天)的模拟,就像在Jupyter Notebook中那样

from ipyparallel import Client
rc = Client()
lview = rc.load_balanced_view()
ar = lview.map(runsimulation, parameter)

我真的需要那些结果。但不幸的是,由于记忆饥饿,单个实例死亡。现在我再也无法使用ar [i]访问结果了。是否有机会恢复所有其他最肯定计算的结果(我可以在集群的Ganglia监视器中看到特征内存和CPU时间消耗)。

我仍然在Jupyter笔记本中拥有对象ar。

2 个答案:

答案 0 :(得分:1)

您可以获得单个msg_ids的部分结果。使用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)

答案 1 :(得分:0)

对我来说,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,这样我得到一个相等长度的列表作为输入。