Python standart kitaplığının timeit modülünü kullanarak kodunuzdaki bir işlemin yürütme süresini kolayca ölçebilirsiniz. Bu, hızlı bir kontrol için kullanışlıdır.
Aşağıdaki iki durum burada tartışılacaktır.
- Bir Python dosyasında ölçün:
timeit.timeit()
,timeit.repeat()
- Jupyter Notebook ile Ölçüm:
%timeit
,%%timeit
Diğer bir yol ise programda geçen süreyi ölçmek için time.time() kullanmaktır.
Python dosyalarındaki ölçümler: timeit.timeit(), timeit.repeat()
Örnek olarak, ardışık n sayının toplamını hesaplayan basit bir fonksiyon olan test(n)’nin işlem süresini ölçeceğiz.
import timeit
def test(n):
return sum(range(n))
n = 10000
loop = 1000
result = timeit.timeit('test(n)', globals=globals(), number=loop)
print(result / loop)
# 0.0002666301020071842
Ölçmek istediğiniz kodu timeit.timeit() işlevine bir dize olarak iletirseniz, NUMBER kez yürütülür ve geçen süre döndürülür.
Sayı için varsayılan değer 1.000.000’dir. Zaman alan bir işlem için varsayılan değeri kullanırsanız, bunun çok zaman alacağını unutmayın.
Globals()’i globals argümanı olarak ileterek, kod global ad alanında yürütülür.
Bu olmadan, fonksiyon testi ve n değişkeni yukarıdaki örnekte tanınmaz.
Belirtilecek kod, bir dize yerine çağrılabilir bir nesne olabilir, bu nedenle argümansız bir lambda ifadesi olarak belirtilebilir; bu durumda, globals argümanının belirtilmesi gerekmez.
result = timeit.timeit(lambda: test(n), number=loop)
print(result / loop)
# 0.00027574066299712287
Sonucun birimi saniyedir. Burada çıktı, yürütme başına işlem süresinin yürütme sayısına bölümüdür.
Bölmezseniz, yürütme sayısını artırdıkça sonuç değeri daha da büyüyecektir.
print(timeit.timeit(lambda: test(n), number=1))
print(timeit.timeit(lambda: test(n), number=10))
print(timeit.timeit(lambda: test(n), number=100))
# 0.0003999490290880203
# 0.0038685189792886376
# 0.03517670702422038
timeit.repeat() işlevi kullanılarak timeit() tekrar tekrar çalıştırılabilir. Sonuç bir liste olarak elde edilecektir.
repeat = 5
print(timeit.repeat(lambda: test(n), repeat=repeat, number=100))
# [0.044914519996382296, 0.039663890027441084, 0.02868645201670006, 0.022745631984435022, 0.023260265996214002]
Jupyter Notebook ile Ölçüm:%timeit, %%timeit
Jupyter Notebook’ta (IPython) aşağıdaki sihirli komutları kullanabilirsiniz; timeit modülünü içe aktarmaya gerek yoktur.
%timeit
%%timeit
%zaman
%timeit içinde, komut satırı argümanları gibi bir boşlukla ayrılmış hedef kodu belirtin.
Varsayılan olarak, timeit.timeit() içindeki sayı ve tekrar otomatik olarak belirlenir. Bunları -n ve -r seçenekleriyle de belirtebilirsiniz.
Sonuçlar ortalama ve standart sapma olarak hesaplanır.
%timeit test(n)
# 259 µs ± 4.87 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit -r 3 -n 10000 test(n)
# 237 µs ± 6.44 µs per loop (mean ± std. dev. of 3 runs, 10000 loops each)
%%zaman
%%timeit sihirli komutu, tüm hücrenin işlem süresini ölçmek için kullanılabilir.
Örnek olarak aynı işlemi NumPy kullanarak çalıştıralım. -n ve -r seçenekleri atlanabilir.
Tüm hücrenin işlem süresini ölçtüğümüz için, aşağıdaki örnek NumPy’yi içe aktarma süresini içerir.
%%timeit -r 3 -n 10000
import numpy as np
a = np.arange(n)
np.sum(a)
# 19.7 µs ± 9.57 µs per loop (mean ± std. dev. of 3 runs, 10000 loops each)
%%timeit için bir argüman olarak hedef kodu belirtmeye gerek yoktur. Tek yapmanız gereken bir hücrenin başına %%timeit yazmaktır, bu yüzden kullanımı en kolay olanıdır.