Clojure писать файлы медленно - PullRequest
3 голосов
/ 29 января 2020

У нас есть приложение Clojure, которое берет набор данных (~ 3000 строк) и записывает его в локальный файл, используя spit. Он отлично работает на машине, на которой он был написан, но на любой другой машине, которая выполняет код git, шаг записи мучительно медленен. Процесс занимает несколько секунд на исходном компьютере, но занимает более десяти минут на каждом другом компьютере.

Обе эти две основные машины (машина разработчика и моя) являются системами Manjaro Arch Linux с сопоставимыми характеристиками. и конфигурации. Мы оба извлекаем данные из одного и того же Git источника, и оба извлекаем одни и те же данные.

Мы подтвердили, что код все еще выполняется на моем компьютере, поскольку он завершается, если я пытаюсь написать только первые десять строк. набора данных (даже это все еще занимает почти минуту).

Процессор и ОЗУ практически не затрагиваются во время процесса на обеих машинах, а размер выходного файла меньше МБ.

У нас возникает та же проблема, если мы используем библиотеку Java .io с clojure.data.csv или dk.ative.docjure.spreadsheet вместо spit.

Абстрагированный тип данных:

[["Name" "Price"]
 ["Foo Widget" 100]
 ["Bar Widget" 200]]

(но, конечно, больше 3000 строк)

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 31 января 2020

Хорошо, поэтому, пока мы работали над примером кода для совместного использования, мы получили несколько предложений из другого источника, которые решили проблему.

  1. Мы изменили читатель на использование входного потока вместо чтение всего файла
  2. Мы завернули писателя в doall, что также было предложено @Reut Sharabani

Основная проблема заключается в том, как каждая машина обрабатывает лень

Спасибо всем, кто откликнулся!

...