У меня большой CSV-файл, который содержит независимые элементы, для обработки которых требуется немало усилий. Я хотел бы иметь возможность обрабатывать каждую позицию параллельно. Я нашел пример кода для обработки файла CSV на SO здесь:
Новичок, преобразовывающий файлы CSV в Clojure
Код:
(use '(clojure.contrib duck-streams str-utils)) ;;'
(with-out-writer "coords.txt"
(doseq [line (read-lines "coords.csv")]
(let [[x y z p] (re-split #"," line)]
(println (str-join \space [p x y z])))))
Это позволило распечатать данные из моего CSV-файла, что было здорово - но он использовал только один процессор. Я пробовал разные вещи, заканчивающиеся на:
(pmap println (read-lines "foo"))
Это работает нормально в интерактивном режиме, но ничего не делает при запуске из командной строки. Из разговора по IRC это связано с тем, что stdout по умолчанию недоступен для потоков.
На самом деле я ищу способ идиоматически применять функцию к каждой строке файла CSV и делать это параллельно. Я также хотел бы напечатать некоторые результаты на стандартный вывод во время тестирования, если это вообще возможно.
Есть идеи?