Domanda

non sono stato in grado di trovare questo da nessuna parte online. Stavo cercando di scoprire usando un profiler come ottimizzare meglio il mio codice, e quando sono ordinati per quali funzioni consumano più tempo cumulativamente, le cose come str (), la stampa, e altre simili funzioni ampiamente utilizzate mangio gran parte del profilo. Qual è il modo migliore per profilare un programma Python per ottenere solo le funzioni definite dall'utente per vedere quali aree del loro codice che possono ottimizzare?

Mi auguro che abbia un senso, tutta la luce si può gettare su questo argomento sarebbe molto apprezzato.

È stato utile?

Soluzione

OK, suppongo che il tuo reale obiettivo è di rendere il codice più veloce ragionevolmente possibile, giusto?

E 'naturale pensare a farlo da scoprire per quanto tempo le funzioni prendono, ma c'è un altro modo di vedere le cose.

Si consideri come programma gestisce traccia un albero chiamata, che è un po 'come un albero vero e proprio fuori dalla finestra. Il tronco è come la funzione main, e dove ogni ramo si separa da essa è come chiamare un'altra funzione.

Si supponga che ogni "foglia" richiede una certa quantità di tempo, e ciò che si vuole fare è potare l'albero , in modo da rimuovere il maggior numero possibile di foglie.

Un modo è quello di trovare rami con un sacco di foglie e tagliare le foglie. Un altro modo è quello di tagliare i rami interi se non ne hanno bisogno. Il problema è quello di trovare i rami pesanti che non è necessario.

Un modo osso semplice per farlo è quello di raccogliere parecchi fogli a caso, come 10, e su ciascuno, tracciare una linea verso il basso il suo ramo tutta la strada fino al tronco. Qualsiasi punto di diramazione avrà un certo numero di queste linee che lo attraversano, di foglia in tronco. I più linee attraversano quel punto di diramazione, le foglie sono più su quel ramo, e più si potrebbe risparmiare con la potatura di esso.

Ecco come è possibile applicare questo al vostro programma. Per campionare una foglia, si mette in pausa il programma in modo casuale e guardare lo stack di chiamate. Questa è la linea di fondo al tronco. Ogni sito chiamata su di esso (non funzione, chiamata sito) è un punto di diramazione. Se il sito chiamata è in qualche frazione di campioni, come il 40%, poi che è più o meno quanto si potrebbe risparmiare con la potatura di esso.

Quindi, non pensare a come misurare come le funzioni lunghi prendono. Pensate a come chiedere che i siti sono chiamata "pesante". Questo è tutto quello che c'è da fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top