0

Я выполнял параллельные задания в кластере SGE с использованием параллельного IPython. Я отправляю свои задания и извлекаю результаты из базы данных хаба (SQlite) позднее, когда все задания завершены, используя идентификатор сообщения заданий. Это работало нормально, пока мой контроллер не разбился; при перезапуске контроллера я не смог получить задания, отправленные на старый контроллер. Я получил эту ошибку:Получение результатов из базы данных параллельного концентратора IPython

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'}) 

я получаю пустой результат.

ответ

1

По умолчанию запуск контроллера создает новую таблицу (с UUID). Если вы хотите, чтобы каждый сеанс Hub, чтобы добавить в ту же таблицу, добавьте эту строку в ipcontroller-config.py:

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

С учетом этого изменения, каждый последующий сеанс Hub будет основываться на одной и той же истории задач. IPython 2.0 сделает это the default behavior.

+0

Спасибо! Это очень полезно. Есть ли простой способ использовать мой новый контроллер для получения результатов из заданий, которые были отправлены с использованием старого контроллера? Рабочие места заняли некоторое время, и я не хочу их повторно отправлять. Я явно не сохранил UUID для старого контроллера. – KartMan

+0

Вы можете перечислить таблицы в базе данных и получить некоторую информацию, чтобы выяснить, какой из них ([например] (https://gist.github.com/6295505)). Затем просто установите конфигурацию 'SQLiteDB.table' в значение UUID, которое вы хотите восстановить. – minrk