Quali sono alcune buone pratiche nel debug di programmi di multiprocessing in Python?
Quali sono alcune buone pratiche nel debug di programmi di multiprocessing in Python?
Programmi di multiprocessing Python veri e propri (al contrario di programmi multi- threaded Python che hanno a che fare con il temuto GIL ) non sono diversi da quelli in qualsiasi altra lingua. Hanno tutti le stesse sfide di base:
Sebbene esistano metodi di sviluppo che cercano di evitare ciascuno di questi problemi, alla fine della giornata devi davvero pensare a quello che stai facendo. Raccomando pesanti test di stress - molto più di qualsiasi cosa tu pensi che possa accadere nella vita reale - in modo da avere una buona possibilità di colpire quelle Windows of Opportunity e far esplodere lo sviluppo piuttosto che nel bel mezzo di un demo principale o durante la produzione.
Usavamo file di log con microsecondi e quindi creavamo un'app di visualizzazione dei log con codice colore in modo da provare per visualizzare cosa stava accadendo tra processo N in esecuzione su processori M. Abbiamo anche provato (e soprattutto ci siamo riusciti) a creare un sistema in grado di scacciare i file di log per ricreare il contesto del crash.
Ma lo strumento migliore è un buon design e persone davvero cattive e cattive che cercano di far saltare la tua app fuori dall'acqua. (Ciao, dbell!)
Una cosa che trovo molto utile è usare il logger esistente nel modulo multiprocessing
. Prova questo nel tuo codice principale:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Vedi anche: link
Inoltre, puoi accedere al nome del processo corrente usando:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Vedi: link
A parte questo, non conosco nient'altro che i metodi standard di debug come pdb
& co.
Leggi altre domande sui tag debugging python parallel-programming