Ho avuto lo stesso problema. Per quanto posso dire, il pacchetto RunSnakeRun non è stato portato su Python3. Almeno, potrei collegarlo a python2 ma non a python3 (SyntaxError). Inoltre, I penso il formato di output di cProfile non è compatibile con Python 2/3. Non ho trovato il tempo per trovare una conferma definitiva, ma nel documento di cProfile class pstats.Stats(*filenames, stream=sys.stdout), dicono "Il file selezionato dal costruttore sopra deve essere stato creato dalla corrispondente versione di profilo o cProfile. non è garantita la compatibilità dei file con le versioni future di questo profiler e non c'è compatibilità con i file prodotti da altri profiler. ". Questa sembra essere l'origine del tuo problema. Per esempio, ho fatto un profilo di destinazione da python3
import cProfile
cProfile.run('some code to profile', 'restats')
e ho cercato di aprirlo in RunSnakeRun e ottenuto lo stesso errore marhsal che hai. Inoltre, se lo faccio
import pstats
p = pstats.Stats('restats')
p.strip_dirs().sort_stats(-1).print_stats()
in python3, funziona come un fascino. Se lo faccio in python2, dà l'errore di marshall. Ora, RunSnakeRun viene eseguito in python2 (a meno che tu non abbia trovato un modo per farlo funzionare in python3). Quindi, la mia ipotesi è che tu abbia eseguito il tuo profilo in python3 e stia usando strumenti basati su python2 per analizzarli, quali strumenti si aspettano che l'output sia compatibile con python2.
Il progetto RunSnakeRun sembra essere inattivo da un po 'di tempo (il copyright su home page è 2005-2011) e non vi è alcuna indicazione che verrà portato su python3 .... Forse considerare lo strumento di visualizzazione alternativo potrebbe essere il migliore strada da fare per te se vuoi sviluppare in Python3. pyprof2calltree in combinazione con KCachegrind ha funzionato bene per me in Linux. Può fornire una visualizzazione visiva simile dell'output di creazione profili come si otterrebbe da RunSnakeRun.
fonte
2015-10-14 09:02:56