Quali sono alcune buone pratiche nel debug dei programmi multiprocessing in Python?
Quali sono alcune buone pratiche nel debug dei programmi multiprocessing in Python?
Risposte:
I veri programmi Python multiprocessore (al contrario dei programmi Python multi- thread che hanno a che fare con il temuto GIL ) non sono diversi da quelli di qualsiasi altra lingua. Tutti hanno le stesse sfide di base:
Sebbene esistano metodi di sviluppo che cercano di evitare ciascuno di questi problemi, alla fine devi davvero pensare a quello che stai facendo. Raccomando pesanti prove di stress - molto al di là di qualsiasi cosa tu pensi possa accadere nella vita reale - in modo da avere buone probabilità di colpire quelle finestre di opportunità e far esplodere in fase di sviluppo rispetto a durante una demo importante o durante la produzione.
Usavamo i file di log con microsecondi e quindi abbiamo creato un'app di visualizzazione dei log con codice colore in modo da poter provare a visualizzare ciò che stava accadendo tra N processo in esecuzione su processori M. Abbiamo anche provato (e soprattutto ci siamo riusciti) a creare un sistema in grado di scacciare i file di registro per ricreare il contesto del crash.
Ma lo strumento migliore è un buon design e persone davvero cattive e cattive che cercano di far saltare in aria la tua app. (Ciao, Dbell!)
Una cosa che trovo molto utile è usare il logger esistente nel multiprocessing
modulo. Prova questo nel tuo codice principale:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Vedi anche: http://docs.python.org/library/multiprocessing.html#logging
Inoltre, è possibile accedere al nome del processo corrente utilizzando:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Vedi: http://docs.python.org/library/multiprocessing.html#multiprocessing.current_process
A parte questo, non conosco nient'altro che i metodi di debug standard come pdb
& co.