Bir python betiğinin yürütmeyi tamamlaması için geçen süreyi öğrenin


143

Bir python komut dosyasında aşağıdaki kodu var:

def fun(): 
  #Code here

fun()

Bu komut dosyasını yürütmek ve birkaç dakika içinde yürütmek için ne kadar zaman harcadığını öğrenmek istiyorum. Bu komut dosyasının yürütülmesi için ne kadar zaman harcadığını nasıl öğrenebilirim? Bir örnek gerçekten takdir edilecektir.


5
"Python fonksiyon zamanlaması" için arama yapan ilk isabet: daniweb.com/software-development/python/code/216610
Piskvor binadan ayrıldı

Ayrıca cProfile kullanabilirsiniz . Her işlevi ayrı ayrı zamanlama seçeneği sunar
Adam Rosenthal

Yanıtlar:


263
from datetime import datetime
startTime = datetime.now()

#do something

#Python 2: 
print datetime.now() - startTime 

#Python 3: 
print(datetime.now() - startTime)

5
3.6.1'de çalışan Python'da yeni. FYI datetime artık bir özniteliğe sahip değil.
WizzleWuzzle

5
@WizzleWuzzle , sadece datetime.now()bunu yapmazsanız çalışır (sadece Python 3.6.4'te onaylanmıştır). from datetime import datetimeimport datetime
Paul Wicking

130

Komut dosyasını Linux veya UNIX'teki komut satırından yürütüyor musunuz? Bu durumda,

time ./script.py

2
time -p ./script.py -pboru hattı için bayrak
Joy

1
ve boru hattı bize ne yardımcı oluyor?
ak3191

Windows için time python myScript.py Çıkış zamanı saniyeler içinde Yürütme süresi olacak: 38.509970903396606 gerçek 0m38.792s kullanıcı 0m0.015s sys 0m0.046s
Aryashree Pritikrishna

64
import time
start = time.time()

fun()

# python 2
print 'It took', time.time()-start, 'seconds.'

# python 3
print('It took', time.time()-start, 'seconds.')

5
Son satır muhtemelen print('It took {0:0.1f} seconds'.format(time.time() - start))python 3.x'de okunmalıdır .
Chris Mueller

3
@ChrisMueller python2.7'de çalışıyordum. Yine de yorumları burada bırakacağım, böylece insanlar her iki sürümü de görebiliyor.
Çift AA

15

Ne zaman yaptığım kullanımıdır clock()ya time()gelen timekütüphanede. clocktercüman zamanını, timesistem zamanını ölçer. Dokümanlarda ek uyarılar bulunabilir .

Örneğin,

def fn():
    st = time()
    dostuff()
    print 'fn took %.2f seconds' % (time() - st)

Veya alternatif olarak kullanabilirsiniz timeit. timeYaklaşımı ne kadar hızlı patlayabildiğim için sık sık kullanıyorum , ancak ayrı bir yetenekli kod parçasını timeitzamanlıyorsanız, kullanışlı olur.

Gönderen sürümüyle gelen timeit docs ,

def test():
    "Stupid test function"
    L = []
    for i in range(100):
        L.append(i)

if __name__=='__main__':
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()

Daha sonra dakikalara dönüştürmek için, sadece 60'a bölebilirsiniz. Komut dosyası çalışma zamanının saniyeler veya günler olsun, kolayca okunabilir bir biçimde olmasını istiyorsanız, a timedeltave strbuna dönüştürebilirsiniz :

runtime = time() - st
print 'runtime:', timedelta(seconds=runtime)

ve bu formdan bir şey basar [D day[s], ][H]H:MM:SS[.UUUUUU]. Zaman çizelgesi belgelerine göz atabilirsiniz .

Son olarak, aslında peşinde olduğunuz şey kodunuzu oluşturuyorsa, Python profil kitaplığını da kullanılabilir hale getirir .


15
import time 

startTime = time.time()
# Your code here !
print ('The script took {0} second !'.format(time.time() - startTime))

Önceki kod benim için sorunsuz çalışıyor!


14
import sys
import timeit

start = timeit.default_timer()

#do some nice things...

stop = timeit.default_timer()
total_time = stop - start

# output running time in a nice format.
mins, secs = divmod(total_time, 60)
hours, mins = divmod(mins, 60)

sys.stdout.write("Total running time: %d:%d:%d.\n" % (hours, mins, secs))

50 saniyeliğine çıktı "0: 0: 50" dir
htzfun

10

Timeit modülünü kullanın. Bu çok kolay. Example.py dosyanızı Python Kabuğunda etkin olacak şekilde çalıştırın, şimdi kabuğundaki işlevinizi çağırabilirsiniz. Çalışıp çalışmadığını kontrol etmek için deneyin

>>>fun(input)
output

Güzel, bu işe yarar, şimdi timeit'i içe aktarın ve bir zamanlayıcı ayarlayın

>>>import timeit
>>>t = timeit.Timer('example.fun(input)','import example')
>>>

Artık zamanlayıcımız ayarlandı, ne kadar sürdüğünü görebiliyoruz

>>>t.timeit(number=1)
some number here

Ve işte başlıyoruz, size bu işlevi gerçekleştirmek için kaç saniye (veya daha az) sürdüğünü söyleyecektir. Basit bir işlevse, t.timeit (sayı = 1000) (veya herhangi bir sayı!) Değerine yükseltebilir ve ardından ortalamayı almak için yanıtı sayıya bölebilirsiniz.

Umarım bu yardımcı olur.


0

zaman ve tarih saat paketlerini kullanır.

herhangi biri bu komut dosyasını yürütmek ve birkaç dakika içinde yürütmek için ne kadar zaman harcadığını öğrenmek istiyorsa

import time
from time import strftime
from datetime import datetime 
from time import gmtime

def start_time_():    
    #import time
    start_time = time.time()
    return(start_time)

def end_time_():
    #import time
    end_time = time.time()
    return(end_time)

def Execution_time(start_time_,end_time_):
   #import time
   #from time import strftime
   #from datetime import datetime 
   #from time import gmtime
   return(strftime("%H:%M:%S",gmtime(int('{:.0f}'.format(float(str((end_time-start_time))))))))

start_time = start_time_()
# your code here #
[i for i in range(0,100000000)]
# your code here #
end_time = end_time_()
print("Execution_time is :", Execution_time(start_time,end_time))

Yukarıdaki kod benim için çalışıyor. Umarım bu yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.