Python cung cấp nhiều cách để đo thời gian thực thi cho một đoạn mã python. Một cách là sử dụng mô-đun thời gian có sẵn của python và tiết kiệm thời gian trước và sau khi thực thi chương trình?
Thời gian Python
Khi một số chương trình đang chạy, nhiều tiến trình cũng chạy trong nền để làm cho mã đó có thể thực thi được. Mô-đun thời gian không tính thời gian thực hiện các quy trình nền, tuy nhiên, nếu bạn cần các phép đo hiệu suất thời gian chính xác thì thời gian là mô-đun để thực hiện.
Mô-đun thời gian chạy mã khoảng 1 triệu lần (giá trị mặc định) và có tính đến khoảng thời gian tối thiểu để chạy đoạn mã đó.
Nhận thời gian thực thi Python bằng timeit
Chúng ta có thể sử dụng mô-đun timeit theo nhiều cách. Một trong những cách đơn giản nhất là sử dụng trực tiếp trên python CLI.
Ví dụ
Trước tiên, chúng tôi sẽ bắt đầu sử dụng python CLI với mô-đun timeit. Khi CLI được sử dụng, chúng tôi sẽ nhận thấy rằng chính mô-đun quyết định số lần lặp lại được thực hiện cho cùng một đoạn mã.
Ví dụ 1
C:\ Users \ rajesh> python -m timeit "'-'. join (str (n) for n in range (200))" 1000 vòng, tốt nhất là 3:290 usec mỗi vòng lặpC:\ Users \ rajesh> python -m timeit "'-'. join (str (n) for n in range (200))" 1000 vòng lặp, tốt nhất là 3:292 usec mỗi vòng lặpC:\ Users \ rajesh> python -m timeit "'-' .join (str (n) for n in range (200)) "1000 vòng lặp, tốt nhất là 3:294 usec mỗi vòng lặp
Ví dụ 2
Tiếp theo, chúng tôi giới thiệu timeit với một ví dụ đơn giản khác nhưng trước tiên chúng ta phải nhập mô-đun timeit với câu lệnh “import timeit”. Điều này là bắt buộc trong trường hợp chúng tôi không sử dụng cú pháp dòng lệnh như trên.
# Import timeit module và in thời gian trả về. # ... Chỉ định số lần lặp tùy chọn.print (timeit.timeit ("y ='x' * 3", number =10000000)) print (timeit.timeit ("xy ='x' + 'x' + 'x' + 'x' + 'x' ", number =10000000))
Ở trên, chúng tôi chuyển các câu lệnh trong các chuỗi được trích dẫn tới phương thức timeit.timeit và sau đó chúng tôi tăng số lần lặp bằng cách chỉ định một đối số số.
Đầu ra
Lần đầu tiên khi chạy chương trình trên, kết quả được tạo:
xxxxxxxxxx0.90411368966266350.7712796073957123
Lần thứ hai khi chạy chương trình trên, kết quả được tạo:
xxxxxxxxxx0.73170158744277510.7312688195585995
Lần thứ ba khi chạy chương trình trên, kết quả được tạo:
xxxxxxxxxx0.72408624111728240.7255863890794246
Chúng tôi đã thực hiện chương trình trên của chúng tôi nhiều lần (3 lần) và thấy rằng có sự giảm thời gian thực hiện. Thay vì làm điều đó theo cách thủ công, hãy thực hiện lặp lại thông qua chương trình:
#Import timeit moduleimport timeit # Call timeit trên các câu lệnh và in thời gian trả về. # ... Chỉ định số lần lặp tùy chọn.print (timeit.repeat ("y ='x' * 3", number =10000000, repeat =5)) print () print (timeit.repeat ("xy ='x' + 'x' + 'x' + 'x' + 'x'", number =10000000, repeat =5))
Đầu ra
[0,7303736343436382, 0,7213687552991258, 0,7362311105941466, 0,7293136666273243, 0,7278277732068212] [0,7388334197158559, 0,7378481457977326, 0,9483867338682777392, 0,735295495Chạy Nhiều câu lệnh bằng cách sử dụng mô-đun timeit:
Chúng ta có thể sử dụng nhiều câu lệnh với mô-đun timeit. Chúng tôi phân tách từng câu lệnh bằng dấu chấm phẩy. Mặc dù đó không phải là cách tốt nhất để viết mã nhưng giúp chỉ định các đoạn mã dài hơn.
#Import timeit moduleimport timeit # Sử dụng dấu chấm phẩy cho nhiều câu lệnh.print (timeit.repeat ("x =2; x * =2", number =100000000)) print (timeit.repeat ("x =1; x * =4 ", number =100000000))Đầu ra
[24.859605879029118, 23.58795536845994, 23.95826726353284] [22.70639977603264, 21.380195994245724, 20.71523588130414]Sử dụng Phương pháp, thiết lập trong mô-đun Timeit:
Chúng ta có thể sử dụng các phương thức tùy chỉnh trong thời gian bằng cách chỉ định một đối số thiết lập. Trong đối số này, chúng tôi chỉ định một câu lệnh nhập cho biết các phương thức chúng tôi gọi.
#Import timeit moduleimport timeitdef func1 ():return 1def func2 ():return sum ([- 1, 0, 1, 1]) # Test method.print (func1 ()) print (func2 ()) # Pass thiết lập đối số để gọi các method.print (timeit.repeat ("func1 ()", setup ="from __main__ import func1")) print (timeit.repeat ("func2 ()", setup ="from __main__ import func2"))Trong chương trình trên, chúng tôi đánh giá phương thức func1 () so với phương thức func2 ().
Đầu ra
11 [0,44798489246658874, 0,4411512652046069, 0,44570416580426686] [1,583622557983199, 1,5712399227517881, 1,5469479030713984]Vì func1 () thực hiện ít công việc hơn, thực thi nhanh hơn nhiều.
Tóm tắt
Ở trên, chúng ta đã thấy cách chúng ta có thể đo lường hiệu suất của đoạn mã python nhỏ bằng cách sử dụng mô-đun thời gian sử dụng CLI và các tập lệnh.