Tengo un programa de Python con varios subprocesos. Cada hilo detecta eventos, que me gustaría guardar en alguna parte para poder leerlos nuevamente (para probar). En este momento, estoy usando Pickle para dar salida a los eventos, y cada hilo da salida a un archivo diferente. Idealmente, solo usaría un archivo de salida y todos los hilos escribirían en él, pero cuando pruebo esto, parece que los diversos hilos intentan escribir su salida al mismo tiempo, y no se guardan en escabecho correctamente. ¿Hay alguna forma de hacer esto?Decapado de varios subprocesos en Python
Respuesta
parece un buen lugar para usar un Queue
.
- Haga que todos sus hilos de detección de eventos pongan elementos en una cola compartida.
- Crea otro hilo para obtener elementos de la cola, y escribe/pickle/lo que sea de este hilo.
de los docs cola:
"El módulo Queue implementa multi-productores, colas múltiples de consumo Se es especialmente útil en la programación roscado cuando la información debe ser intercambiados de forma segura entre varios subprocesos.. La clase Queue en este módulo implementa todas las semánticas de bloqueo necesarias. Depende de la disponibilidad del soporte de subprocesos en Python; consulte el módulo de subprocesamiento . "
Sí, con threading.Lock() objetos. Crea un bloqueo antes de crear todos sus subprocesos, se lo da al método que es responsable de guardar/decapado de elementos, y este método debe adquirir el bloqueo antes de escribir en el archivo y soltarlo después.
Puede crear un lock y adquirirlo/soltarlo en cada llamada al pickle.dump()
.
El módulo logging tiene un Rlock
incorporado en sus manipuladores. Así que podría logging
como siempre (simplemente cree un controlador para iniciar sesión en un archivo).
Aquí hay un ejemplo usando threading.Lock():
import threading
import pickle
picke_lock = threading.Lock()
def do(s):
picke_lock.acquire()
try:
ps = pickle.dumps(s)
finally:
picke_lock.release()
return ps
t1 = threading.Thread(target=do, args =("foo",))
t2 = threading.Thread(target=do, args =("bar",))
p1 = t1.start()
p2 = t2.start()
inpt = raw_input('type anything and click enter... ')
- 1. error de decapado en python?
- 2. Python Decapado ranuras de error
- 3. Lectura de un único archivo de varios subprocesos en python
- 4. Comprensión de varios subprocesos
- 5. decapado con Gracia-degradantes en Python
- 6. Error de decapado por multiproceso de Python
- 7. Decapado de estilo Python para C++?
- 8. Java: sincronización de subprocesos en varios servidores
- 9. python: se agrega al mismo archivo desde varios subprocesos
- 10. Ejecutar tareas en varios subprocesos en node.js
- 11. Decapado de un método independiente en Python 3
- 12. Perfilado de subprocesos de Python
- 13. Consola de llamada.WriteLine de varios subprocesos
- 14. Transacción de Entity Framework con varios subprocesos
- 15. ¿Es seguro leer de varios subprocesos?
- 16. Python: decapado de objetos altamente recursivos sin usar `setcursionlimit`
- 17. ¿Cómo se ejecutan varios procesos/subprocesos/interfaces de Tornado?
- 18. ¿Realmente Node.js usa varios subprocesos debajo?
- 19. java descarga varios archivos usando subprocesos
- 20. Gestión de sesiones de Spring + Hibernate en varios subprocesos
- 21. Espere al final de los subprocesos con varios trabajos paralelos
- 22. DataContext de Linq-to-SQL en varios subprocesos
- 23. ¿El objeto Mapper de Hadoop está compartido en varios subprocesos?
- 24. Descarga de subprocesos de Python
- 25. Escribir en FileOutputStream desde varios subprocesos en Java
- 26. Unión de subprocesos interrumpibles en Python
- 27. Decapado de un gráfico con ciclos
- 28. No se puede operar ObservableCollection en varios subprocesos
- 29. cómo descargar un solo archivo con varios subprocesos en C#
- 30. ¿Cuándo elegir varios procesos sobre subprocesos en Java?