Pēc konstrukcijas Python ērtībai, lasāmībai un ērtai lietošanai liek priekšā veiktspēju. Bet tas nenozīmē, ka jums vajadzētu samierināties ar lēnu Python kodu. Iespējams, kaut ko varat darīt, lai to paātrinātu.
Starp rīkiem, kas pieejami Python koda veiktspējas profilēšanai, vienkāršākais ir laiks
modulis. laiks
tiek izmantots, lai izmērītu nelielu koda fragmentu - dažu rindiņu, funkcijas - ātrumu, izpildot kodu tūkstošiem vai pat miljonu reižu un ziņojot, cik ilgi šīs izpildes bija nepieciešamas.
laiks
ir visnoderīgākais, lai salīdzinātu divus vai trīs dažādus veidus, kā kaut ko darīt, un redzētu, kurš ir ātrākais. Piemēram, cilpa, kas darbojas tūkstošiem atkārtojumu, ir parasta Python sašaurināšanās vieta. Ja jūs varat atrast veidu, kā paātrināt šīs cilpas ieviešanu - teiksim, izmantojot Python iebūvētos, nevis ar roku rakstīto kodu, jūs varētu iegūt izmērāmu veiktspējas uzlabojumu.
Vienkāršs Python timeit piemērs
Šeit ir vienkāršs piemērs laiks
darbojas:
def f1 (): n diapazonā (100): nodot def f2 (): n = 0, kamēr n <100: n + = 1, ja __name__ == "__main__": importēt laiku drukāt (timeit.timeit (f1, skaitlis = 100000)) izdrukāt (timeit.timeit (f2, skaitlis = 100000))
Šī programma salīdzina divu veidu veiktspēju, kā atkārtot ciklu 100 reizes: izmantojot Python iebūvētodiapazons
funkcija (f1
) un palielinot mainīgo (f2
). laiks
katru no šīm pieejām palaiž 100 000 reizes, un katrai no tām nodrošina kopējo izpildlaiku. Pēc noklusējuma,laiks
izmanto vienu miljonu skrējienu, taču šis piemērs parāda, kā jūs varat iestatīt palaišanas skaitu jebkuram skaitlim, kas šķiet piemērots.
Rezultāti (no Intel i7-3770K procesora):
0.12523150.45453989999999994
Skaidrsdiapazons
pieeja ir daudz ātrāka, ar koeficientu aptuveni 3,75. Tas nav pārsteidzoši; iebūvēta Python izmantošana parasti nodrošina labāku sniegumu nekā manuāla manipulēšana ar Python objektiem.
Izmantojiet Python timeit, nododot virkni
Vēl viens izmantošanas veidslaiks
ir nodot virkni, kas tiek vērtēta kā Python programma:
importa laiksdrukāt (timeit.timeit ('n diapazonā (100): caurlaide'))
To var izdarīt arī no komandrindas:
python -m timeit "n diapazonā (100): izturēt"
Tomēr kopumā ir vieglāk izmantot iepriekš parādīto tehniku, jo jums nav nepieciešams neērti uzvilkt kodu teksta virknē.
Python timeit padomi
Tikpat noderīgi kālaiks
ir, paturiet prātā šos brīdinājumus par to, kā to izmantot.
Izvairieties no timeit izmantošanas visas programmas profilēšanai
Nekas tev nesakanevar laiku visu programmu arlaiks
. Piemēram, vienkāršs 10 rindiņu skripts nav slikts kandidāts, lai šādā veidā tiktu profilēts.
Bet šim darbam ir labāki rīki, piemēram, Python'scProfils
modulis, kas ģenerē daudz detalizētāku statistiku par visas jūsu programmas veiktspēju. laiks
vislabāk darbojas ar vienu komponentu vai koda fragmentu - atkal funkciju vai dažām koda rindām. Jebkas cits, kas parasti rada pārāk trokšņainus un pretrunīgus rezultātus, lai sniegtu jums nozīmīgu snieguma informāciju.
Turklāt, ja profilējamā programma tiek pabeigta daudzas minūtes,laiks
nebūs daudz noderīga. Pirmkārt, koda izpilde ilgs vairāk nekā dažas reizes, tāpēc izvēlētais laiks būs ļoti rupjš. Diviem darbam labāk piemēroti citi rīki.
Veiciet vairākus laika periodus ar dažādām mašīnām
Katru reizi programmas nedarbojas vienā ātrumā. Mūsdienu skaitļošanas vide rada daudz nenoteiktības - konkurence ar citām programmām par resursiem, kešatmiņas uzvedību, plānošanu utt.laiks
mēģina to kompensēt, izpildot kodu ad infinitum, taču joprojām ir laba ideja apkopot vairākus izmēģinājumus. Jums vajadzētu palaist alaiks
profilu daudzas reizes, izmetiet sliktākos un labākos rādītājus, bet pārējos vidēji.
Visbeidzot, tas palīdz arī veikt vienu un to pašu testu dažādās sistēmās: kā SSD diskā izturēsies kaut kas ar disku saistīts, salīdzinot ar parasto vērpšanas cieto disku? Tāpat kā ar jebkuru citu jautājumu par veiktspēju - neuzminiet, nepārbaudiet.