Tìm ra thời gian để kịch bản python hoàn thành việc thực thi


143

Tôi có đoạn mã sau trong tập lệnh python:

def fun(): 
  #Code here

fun()

Tôi muốn thực thi kịch bản này và cũng tìm hiểu mất bao nhiêu thời gian để thực hiện trong vài phút. Làm thế nào để tôi tìm ra mất bao nhiêu thời gian để kịch bản này thực thi? Một ví dụ sẽ được thực sự đánh giá cao.


5
Lần truy cập đầu tiên vào tìm kiếm "thời gian chức năng python": daniweb.com/software-development/python/code/216610
Piskvor rời khỏi tòa nhà

Bạn cũng có thể sử dụng cProfile . Cung cấp cho bạn tùy chọn để tính thời gian cho từng chức năng một cách riêng biệt
Adam Rosenthal

Câu trả lời:


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

#do something

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

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

5
Mới sử dụng Python, làm việc trong 3.6.1. Thời gian FYI không còn có thuộc tính bây giờ.
WizzleWuheads

5
@WizzleWuheads datetime.now()hoạt động nếu bạn làm from datetime import datetime, không chỉ import datetime(chỉ được xác nhận trên Python 3.6.4).
Paul Wicking

130

Bạn có thực thi tập lệnh từ dòng lệnh trên Linux hoặc UNIX không? Trong trường hợp đó, bạn chỉ có thể sử dụng

time ./script.py

2
time -p ./script.py -pcờ cho đường ống
Joy

1
và đường ống giúp chúng ta làm gì?
ak3191

thời gian python myScript.py cho windows Cửa sổ đặt ra sẽ là Thời gian thực hiện trong vài giây: 38.509970903396606 người dùng thực 0m38.792s 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
Dòng cuối cùng có lẽ nên đọc print('It took {0:0.1f} seconds'.format(time.time() - start))trong python 3.x.
Chris Mueller

3
@ChrisMueller Tôi đã làm việc trong python2.7. Tôi sẽ để lại nhận xét ở đây để mọi người có thể thấy cả hai phiên bản.
Double AA

15

Những gì tôi thường làm là sử dụng clock()hoặc time()từ timethư viện. clockđo thời gian phiên dịch, trong khi timeđo thời gian hệ thống. Hãy cẩn thận có thể được tìm thấy trong các tài liệu .

Ví dụ,

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

Hoặc cách khác, bạn có thể sử dụng timeit. Tôi thường sử dụng timecách tiếp cận do tôi có thể tạo ra nó nhanh như thế nào, nhưng nếu bạn định thời gian cho một đoạn mã có khả năng cô lập, sẽ timeitcó ích.

Từ các tài liệu thời gian ,

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

Sau đó, để chuyển đổi thành phút, bạn chỉ cần chia cho 60. Nếu bạn muốn thời gian chạy tập lệnh ở định dạng dễ đọc, dù là giây hay ngày, bạn có thể chuyển đổi thành a timedeltastrnó:

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

và nó sẽ in ra một cái gì đó của mẫu [D day[s], ][H]H:MM:SS[.UUUUUU]. Bạn có thể kiểm tra các tài liệu timedelta .

Và cuối cùng, nếu những gì bạn thực sự theo sau là lược tả mã của bạn, Python cũng có sẵn thư viện hồ sơ .


15
import time 

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

Các mã trước đây làm việc cho tôi không có vấn đề!


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

bản in trong 50 giây là "0: 0: 50"
htzfun

10

Sử dụng mô-đun thời gian. Nó rất dễ. Chạy tệp example.txt của bạn để nó hoạt động trong Python Shell, bây giờ bạn có thể gọi hàm của bạn trong trình bao. Hãy thử để kiểm tra xem nó hoạt động

>>>fun(input)
output

Tốt, nó hoạt động, bây giờ nhập thời gian và thiết lập một bộ đếm thời gian

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

Bây giờ chúng ta đã thiết lập bộ đếm thời gian, chúng ta có thể thấy nó mất bao lâu

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

Và ở đó chúng tôi đi, nó sẽ cho bạn biết phải mất bao nhiêu giây (hoặc ít hơn) để thực hiện chức năng đó. Nếu đó là một hàm đơn giản thì bạn có thể tăng nó lên t.timeit (số = 1000) (hoặc bất kỳ số nào!) Và sau đó chia câu trả lời cho số đó để lấy trung bình.

Tôi hi vọng cái này giúp được.


0

sử dụng các gói thời gian và thời gian.

nếu có ai muốn thực thi tập lệnh này và cũng tìm ra mất bao nhiêu thời gian để thực hiện trong vài phút

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

Các mã trên làm việc cho tôi. Tôi hi vọng cái này giúp được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.