Cari tahu waktu yang dibutuhkan untuk skrip python untuk menyelesaikan eksekusi

143

Saya memiliki kode berikut dalam skrip python:

def fun(): 
  #Code here

fun()

Saya ingin menjalankan skrip ini dan juga mencari tahu berapa banyak waktu yang diperlukan untuk mengeksekusi dalam hitungan menit. Bagaimana saya mengetahui berapa lama waktu yang diperlukan untuk menjalankan skrip ini? Contoh akan sangat dihargai.

James
sumber
5
Hit pertama pada pencarian "python function timing": daniweb.com/software-development/python/code/216610
Piskvor meninggalkan gedung
Anda juga dapat menggunakan cProfile . Memberi Anda opsi untuk mengatur waktu setiap fungsi secara terpisah
Adam Rosenthal

Jawaban:

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

#do something

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

#Python 3: 
print(datetime.now() - startTime)
Petar Ivanov
sumber
5
Baru mengenal Python, bekerja di 3.6.1. FYI datetime tidak lagi memiliki atribut sekarang.
WizzleWuzzle
5
@ WizzleWuzzle datetime.now()berfungsi jika Anda melakukannya from datetime import datetime, bukan hanya import datetime(hanya dikonfirmasi pada Python 3.6.4).
Paul Wicking
130

Apakah Anda menjalankan skrip dari baris perintah di Linux atau UNIX? Dalam hal ini, Anda bisa menggunakannya

time ./script.py
Roy
sumber
2
time -p ./script.py -pflag for pipeline
Joy
1
dan apa yang pipa bantu bagi kita?
ak3191
time python myScript.py for windows Put out akan menjadi waktu Eksekusi dalam detik: 38.509970903396606 nyata 0m38.792s pengguna 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.')
AA ganda
sumber
5
Baris terakhir mungkin harus dibaca print('It took {0:0.1f} seconds'.format(time.time() - start))dengan python 3.x.
Chris Mueller
3
@ ChrisMueller saya bekerja di python2.7. Saya akan meninggalkan komentar di sini sehingga orang dapat melihat kedua versi.
Dobel AA
15

Apa yang biasanya saya lakukan adalah menggunakan clock()atau time()dari timeperpustakaan. clockmengukur waktu juru bahasa, sementara timemengukur waktu sistem. Peringatan tambahan dapat ditemukan di dokumen .

Sebagai contoh,

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

Atau sebagai alternatif, Anda dapat menggunakan timeit. Saya sering menggunakan timependekatan ini karena seberapa cepat saya dapat menghentikannya, tetapi jika Anda menentukan waktu untuk kode yang terpisah, timeitsangat berguna.

Dari dokumen timeit ,

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()

Kemudian untuk mengonversi ke menit, Anda dapat membaginya dengan 60. Jika Anda ingin skrip runtime dalam format yang mudah dibaca, apakah itu detik atau hari, Anda dapat mengonversinya menjadi timedeltadan str:

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

dan itu akan mencetak sesuatu dari formulir [D day[s], ][H]H:MM:SS[.UUUUUU]. Anda dapat melihat dokumen timedelta .

Dan akhirnya, jika apa yang sebenarnya Anda cari adalah profiling kode Anda, Python juga menyediakan perpustakaan profil .

Darren Yin
sumber
15
import time 

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

Kode sebelumnya berfungsi untuk saya tanpa masalah!

Malek B.
sumber
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))
Pavlos Panteliadis
sumber
cetakan untuk 50 detik adalah "0: 0: 50"
htzfun
10

Gunakan modul timeit. Sangat mudah. Jalankan file example.py Anda sehingga aktif di Python Shell, Anda sekarang bisa memanggil fungsi Anda di shell. Cobalah untuk memeriksanya

>>>fun(input)
output

Bagus, itu berfungsi, sekarang impor timeit dan atur timer

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

Sekarang kita sudah mengatur timer kita, kita bisa melihat berapa lama

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

Dan begitulah, ia akan memberi tahu Anda berapa detik (atau kurang) yang diperlukan untuk menjalankan fungsi itu. Jika fungsi sederhana maka Anda dapat meningkatkannya ke t.timeit (angka = 1000) (atau angka apa pun!) Dan kemudian membagi jawaban dengan angka untuk mendapatkan rata-rata.

Saya harap ini membantu.

Cepat
sumber
0

gunakan paket waktu dan datetime.

jika ada yang ingin menjalankan skrip ini dan juga mencari tahu berapa banyak waktu yang dibutuhkan untuk mengeksekusi dalam hitungan menit

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))

Kode di atas berfungsi untuk saya. Saya harap ini membantu.

thrinadhn
sumber