2009-08-30 1 views
16

Tengo problemas para depurar una aplicación multiproceso (específicamente utilizando un grupo de procesos en el módulo de multiprocesamiento de python). Tengo un punto muerto aparente y no sé qué lo está causando. El seguimiento de la pila no es suficiente para describir el problema, ya que solo muestra el código en el módulo de multiprocesamiento.Técnicas de depuración de multiprocesamiento

¿Hay alguna herramienta de python o técnicas generales para depurar interbloqueos?

Respuesta

31

Yah, depuración de interbloqueos es divertido. Puede configurar el nivel de registro a ser más alto - ve the Python documentation para una descripción de la misma, pero muy rápido:

import multiprocessing, logging 
logger = multiprocessing.log_to_stderr() 
logger.setLevel(multiprocessing.SUBDEBUG) 

Además, agrega el registro para nada en el código que se ocupa de un recurso o lo que sea que pudiera estar en contención. Finalmente, un disparo en la oscuridad: desove de procesos secundarios durante una importación podría causar un problema.

+2

Sí, una gran cantidad de registros, por pequeños que sean, sigue siendo el mejor enfoque general para aislar y, finalmente, localizar y solucionar problemas de interbloqueo ... de ahí el +1. El multiprocesamiento tiene problemas específicos de interbloqueo con su cola, que están bien documentados; compruebe que no se está ejecutando en esos, tal vez. –

3

Con el fin de evitar deadlocks en primer lugar, aprender buenas prácticas es útil, ya que el procesamiento en paralelo es de hecho bastante sutil. ¡El (gratis) Little Book of Semaphores puede ser una lectura muy agradable!

Cuestiones relacionadas