the Python Profilers

clasa Stats

analiza datelor profiler se face folosind Stats clasa.

clasapstats.Stats(*nume de fișiere sau profil, stream=sys.acest constructor de clase creează o instanță a unui „obiect statistic” din afilename (sau listă de nume de fișiere) sau dintr-o instanțăProfile. Outputva fi tipărit în fluxul specificat de stream.

fișierul selectat de constructorul de mai sus trebuie să fi fost creat de versiunea corespunzătoare aprofile saucProfile. Pentru a fi specific, nu există nici o compatibilitate fișier garantat cu versiunile viitoare ale thisprofiler, și nu există nici o compatibilitate cu fișiere produse de otherprofilers, sau același Profiler rula pe un sistem de operare diferit. Dacă sunt furnizate mai multe fișiere, Toate Statisticile pentru funcții identice vor fi combinate, astfel încât să poată fi luată în considerare o imagine de ansamblu a mai multor procese într-un singur raport. Dacă fișierele suplimentare trebuie combinate cu date într-un obiect existent Stats, se poate utiliza metoda add().

în loc de a citi datele de profil dintr-un fișier, un obiectcProfile.Profilesauprofile.Profile poate fi folosit ca sursă de date de profil.

Stats obiectele au următoarele metode:

strip_dirs(). Este foarte util în reducerea mărimiiimprimarea pentru a se încadra în (aproape de) 80 de coloane. Această metodă se modificăobiectul și informațiile dezbrăcate sunt pierdute. După efectuarea operației astrip, obiectul este considerat a avea intrările sale într-o ordine” aleatorie”, așa cum a fost imediat după inițializarea și încărcarea obiectului.Dacăstrip_dirs()face ca două nume de funcții să fie distincte (sunt pe aceeași linie a aceluiași nume de fișier și au același nume de funcție), atunci statisticile pentru aceste două intrări sunt acumulate într-o singură intrare.add(*filenames)

această metodă a claseiStats acumulează informații suplimentare de profilare în obiectul curent de profilare. Argumentele sale ar trebui să se referăla numele de fișiere create de versiunea corespunzătoare a profile.run()sau cProfile.run(). Statisticile pentru funcțiile numite identic (re: fișier, linie,nume) sunt acumulate automat în funcții unice.

dump_stats(nume de fișier)

salvați datele încărcate înStats obiect la un fișier namedfilename. Fișierul este creat dacă nu există și este suprascrisdacă există deja. Aceasta este echivalentă cu metoda cu același numepe clasele profile.Profile și cProfile.Profile.

sort_stats(*keys)

această metodă modifică obiectulStats sortându-l în funcție de criteriile furnizate. Argumentul poate fi fie un șir, fie un SortKeyenum care identifică baza unui fel (exemplu: 'time''name'SortKey.TIME sau SortKey.NAME). Argumentul sortkey enums haveavantage peste argumentul șir în care este mai robust și lesserror predispuse.

când sunt furnizate mai multe chei, atunci se folosesc chei suplimentare ca criterii secundare atunci când există egalitate în toate tastele selectate înaintea lor. De exemplu,sort_stats(SortKey.NAME, SortKey.FILE) va sorta toate intrările în funcție de numele funcției lor și va rezolva toate legăturile(nume de funcții identice) sortând după numele fișierului.

pentru argumentul string, abrevierile pot fi folosite pentru orice nume de chei, atâta timp cât abrevierea este lipsită de ambiguitate.

The following are the valid string and SortKey:

Valid String Arg

Valid enum Arg

Meaning

'calls'

SortKey.CALLS

call count

'cumulative'

SortKey.CUMULATIVE

cumulative time

'cumtime'

N/A

cumulative time

'file'

N/A

file name

'filename'

SortKey.FILENAME

file name

'module'

N/A

file name

'ncalls'

N/A

call count

'pcalls'

SortKey.PCALLS

primitive call count

'line'

SortKey.LINE

line number

'name'

SortKey.NAME

function name

'nfl'

SortKey.NFL

name/file/line

'stdname'

SortKey.STDNAME

standard name

'time'

SortKey.Timp

timp intern

'tottime'

N/A

timp intern

rețineți că tot felul de statistici sunt în ordine descrescătoare (plasând mai întâi elementele consumatoare de timp), unde, ca Nume, fișier și număr de linie căutărisunt în ordine crescătoare (alfabetică). Distincția subtilă dintre SortKey.NFL și SortKey.STDNAME este că numele standard este asort al numelui așa cum este tipărit, ceea ce înseamnă că numerele de linie încorporate sunt comparate într-un mod ciudat. De exemplu, liniile 3, 20 și 40 ar apărea (dacă numele fișierelor ar fi aceleași) în ordinea șirului 20, 3 și 40.In contrast, SortKey.NFL face o comparație numerică a liniei numbers.In fapt, sort_stats(SortKey.NFL) este la fel casort_stats(SortKey.NAME, SortKey.FILENAME, SortKey.LINE).

Din motive de compatibilitate inversă, argumentele numerice-101 și2 sunt permise. Acestea sunt interpretate ca'stdname''calls''time' și'cumulative' respectiv. Dacă se folosește acest format oldstyle (numeric), se va folosi o singură tastă de sortare (tasta numerică), iar argumentele suplimentare vor fi ignorate în tăcere.

nou în versiunea 3.7: adăugat sortkey enum.

reverse_order() XV

această metodă pentruStats clasa inversează ordonarea listei de bază în cadrul obiectului. Rețineți că, în mod implicit ordine ascendentă vsdescending este selectat în mod corespunzător pe baza tastei de sortare de alegere.

print_stats(*restricții)

această metodă pentruStats clasa imprimă un raport așa cum este descrisînprofile.run() definiție.

ordinea tipăririi se bazează pe ultima operațiesort_stats() efectuată pe obiect (sub rezerva modificărilor înadd() șistrip_dirs()).

argumentele furnizate (dacă există) pot fi utilizate pentru a limita lista la intrări semnificative. Inițial, lista este considerată a fi setul completde funcții profilate. Fiecare restricție este fie un număr întreg (pentru a selecta un număr de linii), fie o fracție zecimală între 0,0 și 1.0 inclusiv (pentru a selecta un procent de linii) sau un șir care va fi interpretat ca expresie regulată (pentru a se potrivi modelului cu numele standard tipărit).Dacă sunt furnizate mai multe restricții, atunci acestea sunt aplicate secvențial.De exemplu:

print_stats(.1, 'foo:')

ar limita mai întâi imprimarea la primele 10% din listă și apoi numai printfunctions care au făcut parte din numele fișierului.*foo:. În schimb, comanda:

print_stats('foo:', .1)

ar limita lista la toate funcțiile care au nume de fișiere.*foo:, și apoi continuați să imprimați doar primele 10% dintre ele.

print_callers(*restrictions)

această metodă pentruStats clasa imprimă o listă cu toate funcțiilecare a numit fiecare funcție în baza de date profilate. Ordonarea este identică cu cea furnizată de print_stats(), iar definiția argumentului de restricționare este, de asemenea, identică. Fiecare apelant esteraportat pe propria linie. Formatul diferă ușor în funcție deprofiler care a produs Statisticile:

  • cuprofile, un număr este afișat între paranteze după fiecare apelpentru a arăta de câte ori a fost efectuat acest apel specific. Pentru comoditate, un al doilea număr ne-parantezat repetă timpul cumulat petrecut înfuncția din dreapta.

  • cu cProfile, fiecare apelant este precedat de trei numere: de câte ori a fost efectuat acest apel specific și de timpul total și cumulativ petrecut în funcția curentă în timp ce a fost invocat de acest apelant specific.

print_callees(*restricții)

această metodă pentruStats clasa imprimă o listă a tuturor funcțiilor care au fost apelate de funcția indicată. În afară de această inversare a direcționării apelurilor (re: called vs was called by), argumentele anderdering sunt identice cu metoda print_callers().

get_stats_profile()

această metodă returnează o instanță de StatsProfile, care conține un mappingof nume de funcții la instanțe de FunctionProfile. Fiecare FunctionProfileinstance deține informații legate de profilul funcției, cum ar fi howlong funcția a luat pentru a rula, de câte ori a fost numit, etc…

nou în versiunea 3.9: adăugat următoarele dataclasses: StatsProfile, FunctionProfile.Adăugat următoarea funcție: get_stats_profile.

Lasă un răspuns

Adresa ta de email nu va fi publicată.