PyMongo поднимает [errno 49] не может назначить запрошенный адрес после большого количества запросов
у меня естьMongoDB коллекция с> 1 000 000 документов. Я выполняю начальный.find({ my_query })
вернуть подмножество этих документов (~ 25 000 документов), которые я затем положил вlist
объект.
Затем я зацикливаюсь на каждом из объектов, анализирую некоторые значения из возвращенного документа в списке и выполняю дополнительный запрос, используя эти проанализированные значения через код:
def _perform_queries(query):
conn = pymongo.MongoClient('mongodb://localhost:27017')
try:
coll = conn.databases['race_results']
races = coll.find(query).sort("date", -1)
except BaseException, err:
print('An error occured in runner query: %s\n' % err)
finally:
conn.close()
return races
В этом случае мойquery
словарь это:
{"$and": [{"opponents":
{"$elemMatch": {"$and": [
{"runner.name": name},
{"runner.jockey": jockey}
]}}},
{"summary.dist": "1"}
]}
Вот моя проблема. Я создал индекс наopponents.runner.name
а такжеopponents.runner.jockey
, Это делает запросы действительно очень быстрыми. Тем не менее, после примерно 10000 запросов подряд,PyMongo поднимает исключение:
pymongo.errors.AutoReconnect: [Errno 49] Can't assign requested address
Когда я удаляю индекс, я не вижу этой ошибки. Но это занимает около0.5 seconds
за запрос, который неприменим в моем случае.
Кто-нибудь знает, почему[Errno 49] can't assign requested address
может происходить? Я видел несколько других вопросов, связанных сcan't assign requested address
но не по отношению кPyMongo и там ответы никуда меня не ведут.
ОБНОВИТЬ:
Следуя совету Сержа ниже, вот выводulimit -a
:
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 2560
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
Мой MongoDB работает на OS X Yosemite.