2009-08-30 23 views
16

Ho problemi nel debug di un'applicazione multiprocessing (in particolare utilizzando un pool di processi nel modulo multiprocessing di python). Ho un apparente stallo e non so cosa lo stia causando. La traccia dello stack non è sufficiente per descrivere il problema, in quanto visualizza solo il codice nel modulo multiprocessing.Tecniche di debug di multiprocessing

Esistono strumenti Python o altre tecniche generali utilizzate per il debug dei deadlock?

risposta

31

Sì, il debug delle situazioni di stallo è divertente. È possibile impostare il livello di registrazione per essere più alto - vedi the Python documentation per una descrizione di esso, ma molto velocemente:

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

Inoltre, aggiunge la registrazione per qualsiasi cosa nel codice che si occupa di una risorsa o roba del genere che potrebbe essere in contesa. Infine, girato al buio: la generazione dei processi figlio durante un'importazione potrebbe causare un problema.

+2

Sì, un sacco di registrazione, per quanto scarso, è ancora il miglior approccio generale per isolare e localizzare e risolvere problemi di deadlock ... da cui il +1. il multiprocessing ha problemi di deadlock specifici con la sua coda, che sono ben documentati - controlla che non ti stiano correndo dentro, forse. –

3

Al fine di evitare deadlock in primo luogo, l'apprendimento delle buone pratiche è utile, in quanto l'elaborazione parallela è davvero piuttosto sottile. Il (gratuito) Little Book of Semaphores può essere una lettura molto piacevole!

Problemi correlati