Tengo una aplicación multiproceso escrita en Clojure. Existe un problema al hacer que un texto en la consola se visualice correctamente cuando varios hilos escriben en STDOUT. ¿Cómo puedo hacer esto correctamente en Clojure, para que las líneas no se vean entrelazadas? Creo que esto implicaría algún tipo de agente de IO por separado, pero no estoy seguro de cómo hacerlo.Sincronización de la salida estándar en Clojure
8
A
Respuesta
9
creo que esto implicaría algún tipo de agente de IO separada
Sí, eso debería funcionar. Cree un agente (def printer (agent nil))
y llámelo con la declaración print
apropiada, por ejemplo, (send printer #(println msg))
. Los mensajes se ponen en una cola y se ejecutan (asincrónicamente) de a uno por vez.
Para fines de registro también puede consultar tools.logging
que utiliza agentes debajo del capó.
Cuestiones relacionadas
- 1. Java: sincronización de salida estándar y error estándar
- 2. salida de entero a la salida estándar en Haskell
- 3. Estándar para Clojure?
- 4. redireccionando la salida estándar en c y restableciendo la salida estándar
- 5. Cómo sobrescribir la salida estándar en C
- 6. Cómo utilizar la salida estándar en php
- 7. observando la salida estándar de otro proceso
- 8. cout (salida estándar) en C++
- 9. Clojure estándar REPL con editor de búfer?
- 10. Salida de la salida estándar a un archivo y viceversa
- 11. Capturar contenidos de salida estándar en C#
- 12. redirigir la salida estándar a syslog
- 13. Agregar espacios a la salida estándar
- 14. Atributos de metadatos estándar de Clojure
- 15. leer desde la entrada estándar de escritura a la salida estándar en C
- 16. Redirigir la salida estándar de manera eficiente en .NET
- 17. de impresión como la supresión de la salida estándar pitón
- 18. Clojure STM (dosync) x bloque de sincronización de Java
- 19. salida estándar en el código Fortran MPI
- 20. En Clojure, ¿cómo puedo implementar interfaces de recopilación Clojure estándar en mis propios registros y tipos?
- 21. ¿Por qué falla WriteFile al escribir en la salida estándar?
- 22. Impedir que Ghostscript escriba errores en la salida estándar
- 23. Suprime la salida "val it" en el estándar ML
- 24. Cómo escribir en la salida estándar utilizando BufferedWriter
- 25. Redirigir la entrada estándar \ salida en Windows PowerShell
- 26. Salida de prueba de la unidad Unicode Clojure
- 27. Python: imprimir un archivo de salida estándar
- 28. Reencaminamiento entrada y salida estándar de C
- 29. Obtención de la salida estándar desde una aplicación ejecutada
- 30. Obligar a la salida estándar de otro programa mediante Python
Esto funciona, excepto que tengo que enviar al agente un trabajo de impresión a través de otro proxy de función. Enviar println directamente al agente no funcionará por alguna razón. – bvk256
En [este artículo] (http://clojure.org/agents) en el sitio web de Clojure, dice: "Las acciones enviadas a un agente de otro ** agente único o hilo ** se producirán en el orden en que fueron enviado, ** potencialmente entrelazado ** con acciones enviadas al mismo agente ** de otras fuentes **. " ¿Esto significa que aún puede haber problemas cuando "** varios hilos ** escriben en STDOUT"? –