8
私はClojureで書かれたマルチスレッドアプリケーションを持っています。複数のスレッドがSTDOUTに書き込むときにコンソールのテキストが正しく表示されるという問題があります。どのようにClojureでこれを正しく行うことができるので、ラインはインターレースされていませんか?これは何らかの別のIOエージェントを必要とすると思いますが、どうやってそれを行うのか本当に分かりません。Clojureの標準出力の同期
私はClojureで書かれたマルチスレッドアプリケーションを持っています。複数のスレッドがSTDOUTに書き込むときにコンソールのテキストが正しく表示されるという問題があります。どのようにClojureでこれを正しく行うことができるので、ラインはインターレースされていませんか?これは何らかの別のIOエージェントを必要とすると思いますが、どうやってそれを行うのか本当に分かりません。Clojureの標準出力の同期
私は、これははい、それは動作するはず別々のIOエージェント
のいくつかの種類を伴うだろうと思います。エージェント(def printer (agent nil))
を作成し、適切なprint
ステートメント((send printer #(println msg))
など)で呼び出します。メッセージはキューに入れられ、一度に1つずつ(非同期に)実行されます。
ログの目的のために、フードの下でエージェントを使用するtools.logging
を見ることもできます。
この機能は、別の機能プロキシ経由でエージェントに印刷ジョブを送信する必要があることを除きます。何らかの理由でprintlnをエージェントに直接送信することはできません。 – bvk256
ClojureのWebサイトの[この記事](http://clojure.org/agents)には、次のように書かれています。 "別のエージェント**またはエージェント**からエージェントにディスパッチされたアクションは、 **他のソースから**同じエージェントに配信されたアクションで**インターリーブされる可能性があります**。 "**複数スレッド**がSTDOUTに書き込む"ときに問題が残ることはありますか? –