Ich habe eine Multithread-Anwendung in Clojure geschrieben. Es gibt ein Problem, einen Text in der Konsole korrekt darzustellen, wenn mehrere Threads in STDOUT schreiben. Wie kann ich das in Clojure richtig machen, damit die Zeilen nicht interlaced aussehen? Ich denke, dies würde eine Art von separaten IO-Agenten beinhalten, aber ich bin mir nicht sicher, wie ich das machen soll.
Ich denke, das würde eine Art von separatem IO-Agenten beinhalten
Ja, das sollte funktionieren. Erstellen Sie einen Agenten (def printer (agent nil))
und rufen Sie ihn mit der entsprechenden print
-Anweisung auf, z. B. (send printer #(println msg))
. Die Nachrichten werden in eine Warteschlange eingereiht und nacheinander (asynchron) ausgeführt.
Zum Protokollieren können Sie sich auch tools.logging
anschauen, das Agenten unter der Haube verwendet.
Tags und Links clojure concurrency