2012-01-21 18 views
10

qualcuno può suggerire quale sarebbe la migliore pratica o una libreria adatta per determinare:Come determinare il costo della CPU e della memoria di una funzione?

  1. Numero di cicli di CPU utilizzati durante l'esecuzione di una funzione Python?
  2. Quantità di Memoria utilizzata dalla stessa funzione Python?

avevo guardato guppy e meliadi, ma ancora non è possibile ottenere granulari al livello di funzione? Mi sto perdendo qualcosa?

UPDATE La necessità di questa domanda è quello di risolvere una situazione specifica che è, lo scenario è che abbiamo una serie di attività distribuite in esecuzione su istanze di cloud, e ora abbiamo bisogno di riorganizzare il posizionamento di attività sul i tipi di istanza corretti con il cluster, ad esempio le attività funzionali che consumano memoria elevata verrebbero posizionate su istanze di memoria più grandi e così via. Quando intendo compiti (attività di sedano), queste non sono altro che semplici funzioni per le quali dobbiamo ora definire il loro utilizzo di esecuzione.

Grazie.

+10

Se devi preoccuparti di queste cose in modo così preciso, Python non è la lingua che fa per te. –

+2

"Mi manca qualcosa?" Sì. Ti manca il fatto che Python si basi su una delle tante implementazioni: CPython, Jython, PyPy, ognuna delle quali è diversa. La maggior parte delle implementazioni poggia direttamente o indirettamente su librerie GNU C che variano da versione a versione. Sarà molto, molto difficile misurare i cicli della CPU perché ci sono così tanti livelli di software coinvolti. Cosa stai cercando di imparare? Che cosa ti serve sapere? Che decisione stai cercando di fare? –

+0

come @ S.Lott ha detto, Sarà difficile determinare i cicli della CPU della funzione ESATTA poiché anche se è possibile misurarlo, i risultati non saranno accurati. – user779444

risposta

7

Si consiglia di guardare in un CPU profiler per Python:
http://docs.python.org/library/profile.html
uscita Esempio di cProfile.run(command[, filename])

2706 function calls (2004 primitive calls) in 4.504 CPU seconds 

Ordered by: standard name 

ncalls tottime percall cumtime percall filename:lineno(function) 
    2 0.006 0.003 0.953 0.477 pobject.py:75(save_objects) 
    43/3 0.533 0.012 0.749 0.250 pobject.py:99(evaluate) 
... 

Inoltre, memory ha bisogno di un profiler troppo:
aperti profiler di origine: PySizer e Heapy

+0

Grazie a @Ayoubi per il puntatore sopra, sicuramente aiuta un po '. Grazie ancora. –

+1

@ayoubi: visualizza il tempo di esecuzione, ma per quanto riguarda i cicli della CPU (utilizzo della CPU), memoria (utilizzo della memoria)? –

Problemi correlati