Ошибка ввода-вывода Fedora и ошибка 111 при многопроцессорной обработке Python

У меня есть коллекция в mongodb 4.0.2, Я читаю эти документы через итерацию в python 2.7извлекая из них информацию и записывая ее в виде узлов и связей в neo4j 3.4.6, на моем fedora 26 машина.

Вот несколько метрик. Коллекция монго насчитывает около 70000 документов. Ожидается, что это создаст около 1200 узлов в neo4j и 20 000 связей. Поскольку обработка данных в python(второй шаг в последовательности mongo -> python -> neo4j) занимает некоторое время, я использую python multiprocessing чтобы сделать задачу быстрее. я использовал 2*cpu_count() количество процессов. Так как у меня машина четырехъядерная, начинается 8 процессов. Процессы разделяются в пуле, сначала разбивая 70000 документов монго на 8 вложенных документов, а затем обрабатывая каждый вложенный документ параллельно в каждом из 8 процессов. Между каждым запросом neo4j я установил интервал в 100 мс. dbms transaction timeout в neo4j установлен на 3 минуты.

Проблема, с которой я сталкиваюсь, заключается в том, что через некоторое время Fedora начинает выдавать ошибку ввода-вывода и не принимает никакого взаимодействия с терминалом. База данных neo4j становится недоступной, и дальнейшая запись останавливается. Наконец, ошибка 111, ошибка соединения отклоняется на каждой итерации. Я должен принудительно выключить компьютер. Что такое многопроцессорная оптимизация, которая мне не хватает, которая должна это исправить?

В качестве альтернативного подхода я могу преобразовать монго-документы в CSV и использовать APOC для быстрого построения графика с использованием CSV, но я хочу понять, какие упущения оптимизации мне не хватает, что создает проблемы при первом подходе.

0 ответов

Другие вопросы по тегам