2009-09-11 14 views
9

Załóżmy, że mam skrypt Pythona o nazwie my_parallel_script.py który polega na wykorzystaniu multiprocessing parallelize kilka rzeczy i uruchomić go za pomocą następującego polecenia:W jaki sposób można profilować zrównoleglony skrypt w języku Python?

python -m cProfile my_parallel_script.py 

Generuje profilowania wyjścia dla procesu dominującej tylko. Połączenia wykonywane w procesach podrzędnych nie są w ogóle rejestrowane. Czy możliwe jest również profilowanie procesów potomnych?

Jeśli jedyną opcją jest modyfikacja źródła, jaki byłby najprostszy sposób to zrobić?

Odpowiedz

8

cProfile działa tylko w ramach jednego procesu, więc nie będzie automatycznie profilowany proces potomny.

Polecam, aby dostosować kod procesu potomnego, aby można go było wywoływać oddzielnie jako pojedynczy proces. Następnie uruchom go pod profilerem. Prawdopodobnie nie trzeba uruchamiać wieloprocesowego systemu podczas profilowania, a to uprości pracę, aby tylko jedno dziecko działało.

+3

Próbowałem już tego i niestety ** muszę ** uruchomić systemowy proces wieloprocesowy podczas profilowania. Wydaje się, że po pewnym czasie zwalnia znacząco, ale tylko wtedy, gdy działa z włączonym procesem wieloprocesowym. – Fragsworth

+3

Prawdopodobnie jest to rywalizacja o zasoby, a profilowanie może nie być sposobem na znalezienie go. W każdym razie możesz spróbować profilować wszystkie procesy podrzędne na raz. Możesz wywołać profil programowo w dziecięcym kodzie Pythona. –

Powiązane problemy