2011-12-07 35 views
8

我有一个用Clojure编写的多线程应用程序。当多个线程写入STDOUT时,会出现在控制台显示中正确显示文本的问题。我如何在Clojure中正确地做到这一点,所以线条不会看起来交错?我认为这会涉及某种单独的IO代理,但我不确定如何做到这一点。Clojure中标准输出的同步

回答

9

我认为这将涉及到某种独立的IO代理

的是,应该工作。创建一个代理(def printer (agent nil))并用适当的print声明调用它,例如(send printer #(println msg))。这些消息放入一个队列中,并一次一个地执行(异步)。

为了记录目的,你也可以看看tools.logging,它使用代理下的代理。

+0

这有效,但我必须通过另一个功能代理发送给代理打印作业。由于某些原因,直接向代理发送println不起作用。 – bvk256

+0

在[本文](http://clojure.org/agents)在Clojure的网站上,它说: “从另一个**单个代理或线程**派发给代理的动作将按照他们发送,**可能交错**与从其他来源派发给相同代理**的动作**“。 这是否意味着当“**多线程**写入标准输出”时可能会出现问题? –