Синхронизация стандартного вывода в Clojure - PullRequest
8 голосов
/ 07 декабря 2011

У меня есть многопоточное приложение, написанное на Clojure.Существует проблема с правильным отображением текста на консоли, когда несколько потоков записывают в STDOUT.Как я могу сделать это правильно в Clojure, чтобы линии не выглядели чересстрочными?Я думаю, что для этого потребуется какой-то отдельный агент ввода-вывода, но я не совсем уверен, как это сделать.

1 Ответ

9 голосов
/ 07 декабря 2011

Я думаю, что это будет связано с каким-то отдельным агентом ввода-вывода

Да, это должно работать.Создайте агента (def printer (agent nil)) и позвоните ему с соответствующим оператором print, например, (send printer #(println msg)).Сообщения помещаются в очередь и выполняются (асинхронно) по одному.

Для целей ведения журнала вы также можете посмотреть на tools.logging, который использует агентов под капотом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...