Я пытаюсь отсортировать ~ 13 000 документов в локальной базе данных CouchDB моего Mac по дате, но каждый раз зацикливается на документе 5407. Я пытался увеличить время ожидания на Futon, но безрезультатно. Это сообщение об ошибке, которое я получаю:
для строки в db.view ('index15 / by_date_time', startkey = start, endkey = end):
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py", строка 984, в iter
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py", строка 1003, в строках
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py", строка 990, в _fetch
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/client.py", строка 880, в _exec
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 393, в get_json
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 374, в get
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 419, в _request
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 239, в запросе
Файл "/Library/Python/2.6/site-packages/CouchDB-0.8-py2.6.egg/couchdb/http.py", строка 205, в _try_request_with_retries
socket.error: 54
кстати, это то же самое сообщение об ошибке, которое появляется, когда в моем скрипте есть опечатка.
Я использую couchpy для создания представления следующим образом:
def dateTimeToDocMapper (doc):
from dateutil.parser import parse
from datetime import datetime as dt
if doc.get('Date'):
# [year, month, day, hour, min, sec]
_date = list(dt.timetuple(parse(doc['Date']))[:-3])
yield (_date, doc)
во время работы я могу открыть оболочку python и, используя server.tasks (), увидеть, что индексация действительно происходит.
>>> server.tasks ()
[{u'status ': u' Обработано 75 из 13567 изменений (0%) ', u'pid': u '<0.451.0>', u'task ': u'gmail2 _design / index11', u'type ': u'View Group Indexer'}]
но каждый раз, когда он застревает в процессе 5407 из 13567 изменений (это займет ~ 8 минут, чтобы пройти этот путь). Я изучил то, что я считаю документом 5407, и он не выглядит чем-то необычным.
Кстати, если я пытаюсь перезапустить процесс после его остановки, я получаю этот ответ от server.tasks ()
>>> server.tasks ()
[{u'status ': u' Обработано 0 из 8160 изменений (0%) ', u'pid': u '<0.1224.0>', u'task ': u'gmail2 _design / index11', u'type ': u'View Group Indexer'}]
Другими словами, couchDB, похоже, осознал, что он уже обработал первые 5407 из 13567 изменений и теперь у него осталось только 8160.
но затем он почти сразу выходит и выдает мне тот же сокет. Ошибка: 54
Я искал в интернете последние несколько часов, но безрезультатно. Я попытался начать индексацию из других мест, таких как Futon. Как я уже упоминал, одной из моих ошибок была ошибка тайм-аута ОС, и увеличение порогов time_out в конфигурации Футона, похоже, помогло в этом.
Пожалуйста, если бы кто-нибудь мог пролить свет на этот вопрос, я был бы очень очень благодарен. Мне интересно, есть ли способ перезапустить процесс после того, как он уже проиндексировал 5407 документов, или еще лучше, если есть способ не допустить, чтобы вещь вышла из 1/3 пути в первую очередь.
Большое спасибо.