Ho un'applicazione multithread scritto in Clojure. C'è un problema nel rendere un testo nel display della console correttamente quando più thread scrivono su STDOUT. Come posso farlo correttamente in Clojure, quindi le linee non sembreranno interlacciate? Penso che questo implichi una sorta di agente di I/O separato, ma non sono sicuro di come farlo.sincronizzazione dell'output standard Clojure
8
A
risposta
9
penso che questo comporterebbe una sorta di separato agente IO
Sì, che dovrebbe funzionare. Creare un agente (def printer (agent nil))
e chiamarlo con il print
dichiarazione del caso, per esempio, (send printer #(println msg))
. I messaggi vengono messi in coda e vengono eseguiti (in modo asincrono) uno alla volta.
Ai fini della registrazione si potrebbe anche guardare tools.logging
che utilizza agenti sotto il cofano.
Problemi correlati
- 1. Standard per Clojure?
- 2. Clojure idiomatico per la sincronizzazione tra i thread
- 3. In Clojure come posso implementare interfacce di raccolta Clojure standard sui miei record e tipi?
- 4. Autorizzazione sincronizzazione PouchDB?
- 5. sincronizzazione oggetto
- 6. IMAP sincronizzazione
- 7. Sincronizzazione animazioni UIView
- 8. Esiste una pratica standard per la sincronizzazione delle tabelle di SQL Server?
- 9. quale sarebbe il codice "attore" parallelo java per sostituire la sincronizzazione standard con i thread codice
- 10. Clojure Editor scritto in Clojure
- 11. Vagrant/Clojure/Emacs
- 12. Render-to-texture e sincronizzazione
- 13. Sincronizzazione tra due database
- 14. Semaforo e sincronizzazione
- 15. PhpStorm, sulla sincronizzazione ftp
- 16. Sincronizzazione Wait()/notify()
- 17. Errori di sincronizzazione Backbone
- 18. stringhe di sincronizzazione Android.xml
- 19. Java: sincronizzazione su primitive?
- 20. Loop di sincronizzazione stallo
- 21. CUDA: sincronizzazione dei thread
- 22. Sincronizzazione con RestKit
- 23. Python ha sincronizzazione?
- 24. È richiesta la sincronizzazione?
- 25. Sincronizzazione di una coda
- 26. Sincronizzazione semplice del filo
- 27. Sincronizzazione gioco multigiocatore
- 28. Sincronizzazione GPS ora
- 29. EJB e sincronizzazione
- 30. Determinazione dell'ambito di sincronizzazione?
Questo funziona, tranne che devo inviare all'agente un processo di stampa attraverso un proxy un'altra funzione. L'invio di println direttamente all'agent non funzionerà per alcuni motivi. – bvk256
In [questo articolo] (http://clojure.org/agents) sul sito web di Clojure, si dice: "Le azioni inviate a un agente da un altro ** singolo agente o thread ** si verificano nell'ordine in cui erano inviato, ** potenzialmente intercalato ** con azioni inviate allo stesso agente ** da altre fonti **. " Significa questo ancora ci potrebbe essere problemi quando "** ** discussioni più in scrittura a STDOUT"? –