Jak mogę ustawić czas dla segmentu kodu do testowania wydajności za pomocą timeit Pythona?

Mam skrypt w języku Python, który działa tak, jak powinien, ale muszę napisać czas wykonania. Poszukałem, że powinienem użyć czasu, ale wydaje mi się, że nie mogę go uruchomić.

Mój skrypt w języku Python wygląda następująco:

import sys
import getopt
import timeit
import random
import os
import re
import ibm_db
import time
from string import maketrans
myfile = open("results_update.txt", "a")

for r in range(100):
    rannumber = random.randint(0, 100)

    update = "update TABLE set val = %i where MyCount >= '2010' and MyCount < '2012' and number = '250'" % rannumber
    #print rannumber

    conn = ibm_db.pconnect("dsn=myDB","usrname","secretPWD")

for r in range(5):
    print "Run %s\n" % r        
    ibm_db.execute(query_stmt)
 query_stmt = ibm_db.prepare(conn, update)

myfile.close()
ibm_db.close(conn)

Potrzebuję czasu, aby wykonać zapytanie i zapisać je w pliku results_update.txt. Celem jest przetestowanie instrukcji aktualizacji mojej bazy danych przy użyciu różnych indeksów i mechanizmów strojenia.

1 odpowiedź

Możesz użyćtime.time ()lub time.clock () przed i po bloku, który chcesz zmierzyć.

import time

t0 = time.time()
code_block
t1 = time.time()

total = t1-t0

Ta metoda nie jest tak dokładna jak timeit (nie uśrednia kilku przebiegów), ale jest prosta.

time.time () (w Windowsie i Linuksie) itime.clock () (w Linuksie) nie są wystarczająco precyzyjne dla szybkich funkcji (otrzymujesz w sumie = 0). W takim przypadku lub jeśli chcesz uśrednić czas, który upłynął z kilku przebiegów, musisz ręcznie wywołać funkcję wiele razy (jak myślę, że już to robisz w przykładowym kodzie, a timeit robi to automatycznie po ustawieniu argumentu liczby)

import time

def myfast():
   code

n = 10000
t0 = time.time()
for i in range(n): myfast()
t1 = time.time()

total_n = t1-t0

W systemie Windows time.clock () ma znacznie wyższą precyzję (mikrosekunda zamiast sekundy) i jest preferowany w stosunku dotime.time ().

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.