【问题标题】:Retrieving results from IPython parallel hub database从 IPython 并行集线器数据库中检索结果
【发布时间】:2013-08-20 22:31:26
【问题描述】:

我一直在使用 IPython 并行在 SGE 集群上运行并行作业。稍后,当所有作业完成后,我使用作业消息 ID 提交我的作业并从中心数据库 (SQlite) 检索结果。这工作正常,直到我的控制器崩溃;在重新启动控制器时,我无法检索提交给旧控制器的作业。我收到了这个错误:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/IPython/parallel/controller/hub.py", line 1281, in get_results
    raise KeyError('No such message: '+msg_id)
KeyError: u'No such message: 7f1996c0-deb0-4d7c-8782-619c86d2d064'

数据库文件 (tasks.db) 仍然存在,并且大小与集线器崩溃前相同。所以,我确定结果在数据库中。我可以使用新控制器检索它们吗? 另外,如果我使用 bd_query 命令:

rc.db_query({'msg_id' : '7f1996c0-deb0-4d7c-8782-619c86d2d064'})

我得到一个空结果。

【问题讨论】:

    标签: database cluster-computing ipython sungridengine ipython-parallel


    【解决方案1】:

    默认情况下,启动控制器会创建一个新表(带有 UUID)。如果您希望每个 Hub 会话继续添加到同一个表中,请将此行添加到您的 ipcontroller-config.py

    c.SQLiteDB.table = 'ipython-tasks' # or any other value
    

    通过该更改,每个后续的 Hub 会话都将建立在相同的任务历史记录上。 IPython 2.0 将使the default behavior.

    【讨论】:

    • 谢谢!这非常有用。有没有一种简单的方法可以使用我的新控制器从使用旧控制器提交的作业中检索结果?这些作业需要一段时间才能运行,我不想重新提交它们。我没有明确存储旧控制器的 UUID。
    • 您可以列出数据库中的表并获取一些信息以确定它是哪一个 (for example)。然后只需将 SQLiteDB.table 配置设置为您要恢复的 UUID 值。
    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2011-08-11
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多