Timeit hoạt động như thế nào Python?

Với mô-đun timeit tích hợp sẵn của Python, bạn có thể đo lường hiệu suất của các chức năng hoặc dòng mã của mình chỉ bằng một bước đơn giản

Timeit hoạt động như thế nào Python?
Bởi Serdar Yegulalp

Nhà văn cao cấp, InfoWorld.

Timeit hoạt động như thế nào Python?
suy nghĩ

Mục lục

Cho xem nhiều hơn

Theo thiết kế, Python đặt sự thuận tiện, dễ đọc và dễ sử dụng lên trên hiệu suất. Nhưng điều đó không có nghĩa là bạn nên giải quyết mã Python chậm. Có lẽ bạn có thể làm gì đó để tăng tốc nó

Trong số các công cụ có sẵn để định hình hiệu suất của mã Python, đơn giản nhất là mô-đun timeit. timeit được sử dụng để đo tốc độ của các đoạn mã nhỏ — một vài dòng, một hàm — bằng cách thực thi mã hàng nghìn hoặc thậm chí hàng triệu lần và báo cáo thời gian hoàn thành các lần thực thi đó

[ Cũng trên InfoWorld. Cách sử dụng asyncio trong Python]

timeit hữu ích nhất để so sánh hai hoặc ba cách khác nhau để làm một việc gì đó và xem cách nào nhanh nhất. Chẳng hạn, một vòng lặp chạy hàng nghìn lần lặp lại là một nút thắt cổ chai Python phổ biến. Nếu bạn có thể tìm ra cách tăng tốc độ triển khai vòng lặp đó — chẳng hạn như bằng cách sử dụng Python tích hợp sẵn thay vì mã viết tay — thì bạn có thể nhận được sự cải thiện hiệu suất có thể đo lường được

Một ví dụ về thời gian Python đơn giản

Đây là một ví dụ đơn giản về cách hoạt động của timeit

def f1():
    for n in range(100):
        pass

def f2():
    n=0
    while n<100:
        n+=1

if __name__ == "__main__":
    import timeit    
    print (timeit.timeit(f1, number=100000))
    print (timeit.timeit(f2, number=100000))

Chương trình này so sánh hiệu suất của hai cách để lặp qua một vòng lặp 100 lần. bằng cách sử dụng hàm range tích hợp sẵn của Python (f1) và bằng cách tăng một biến (

0.1252315
0.45453989999999994
0). timeit chạy mỗi phương pháp này 100.000 lần và cung cấp tổng thời gian chạy ở cuối mỗi phương pháp. Theo mặc định, timeit sử dụng một triệu lần chạy, nhưng ví dụ này cho thấy cách bạn có thể đặt số lần chạy thành bất kỳ con số nào có vẻ phù hợp

Kết quả (từ bộ xử lý Intel i7-3770K)

0.1252315
0.45453989999999994

Rõ ràng là cách tiếp cận range nhanh hơn nhiều, gấp khoảng 3 lần. 75. Điều này không có gì đáng ngạc nhiên;

[ Cũng trên InfoWorld. Quản lý phụ thuộc và dự án Python tốt hơn với Thơ ]

Sử dụng Python timeit bằng cách chuyển một chuỗi

Một cách khác để sử dụng timeit là chuyển một chuỗi được đánh giá là một chương trình Python

import timeit
print (timeit.timeit('for n in range(100):pass'))

Điều này cũng có thể được thực hiện từ dòng lệnh

python -m timeit "for n in range(100):pass"

Tuy nhiên, về tổng thể, việc sử dụng kỹ thuật được hiển thị ở trên sẽ dễ dàng hơn vì bạn không cần phải vụng về chuyển mã của mình thành một chuỗi văn bản

Mẹo thời gian Python

Hữu ích như timeit là vậy, hãy ghi nhớ những lưu ý này về cách sử dụng nó

Tránh sử dụng timeit cho toàn bộ chương trình

Không có gì nói rằng bạn không thể thời gian cho toàn bộ chương trình với timeit. Chẳng hạn, một tập lệnh 10 dòng đơn giản không phải là ứng cử viên tồi để được lập hồ sơ theo cách này

Tuy nhiên, có những công cụ tốt hơn cho công việc đó — chẳng hạn như mô-đun 

0.1252315
0.45453989999999994
7 của Python, mô-đun này tạo số liệu thống kê chi tiết hơn nhiều về hiệu suất của toàn bộ chương trình của bạn. timeit hoạt động tốt nhất với một thành phần hoặc đoạn mã — một lần nữa, một chức năng hoặc một vài dòng mã. Bất cứ điều gì nhiều hơn thế thường sẽ tạo ra kết quả quá ồn ào và không nhất quán để cung cấp cho bạn bất kỳ thông tin hiệu suất có ý nghĩa nào

Ngoài ra, nếu chương trình bạn đang lập hồ sơ mất nhiều phút để hoàn thành, timeit sẽ không được sử dụng nhiều. Đầu tiên, sẽ mất quá nhiều thời gian để chạy mã nhiều hơn một vài lần, vì vậy thời gian thu thập được sẽ rất thô. Thứ hai, các công cụ khác phù hợp hơn với công việc

Thực hiện nhiều lần chạy timeit trên các máy khác nhau

Các chương trình không chạy ở cùng tốc độ mọi lúc. Môi trường máy tính hiện đại mang đến nhiều điều không chắc chắn — cạnh tranh với các chương trình khác về tài nguyên, hành vi bộ đệm, lập lịch, v.v. timeit cố gắng bù đắp cho điều này bằng cách thực thi mã quảng cáo vô hạn, nhưng bạn vẫn nên tổng hợp nhiều thử nghiệm. Bạn nên chạy một hồ sơ timeit nhiều lần, loại bỏ những điểm kém nhất và tốt nhất, rồi tính trung bình những điểm còn lại

[ Cập nhật các chủ đề nóng trong phát triển phần mềm với bản tin Báo cáo nhà phát triển ứng dụng của InfoWorld ]

Cuối cùng, nó cũng giúp chạy thử nghiệm tương tự trên các hệ thống khác nhau. Làm thế nào một cái gì đó liên kết với đĩa sẽ hoạt động trên SSD so với ổ cứng quay thông thường?

Có liên quan

  • con trăn
  • Phát triển phần mềm
  • Công cụ phát triển

Serdar Yegulalp là một nhà văn cao cấp tại InfoWorld, tập trung vào học máy, container hóa, devops, hệ sinh thái Python và đánh giá định kỳ

Thời gian Timeit trong Python là gì?

Mô-đun timeit của Python thường được sử dụng để đo thời gian thực thi của các đoạn mã nhỏ . Chúng ta cũng có thể sử dụng hàm timeit(), hàm này thực thi một hàm ẩn danh với một số lần thực thi. Nó tạm thời tắt thu gom rác trong khi tính toán thời gian thực hiện.

Python theo dõi thời gian thực hiện như thế nào?

Sử dụng các hàm bên dưới để đo thời gian thực hiện chương trình trong Python. .
thời gian. thời gian(). Đo tổng thời gian đã trôi qua để thực thi mã tính bằng giây
thời gian. .
%timeit và %%timeit. lệnh để lấy thời gian thực hiện của một dòng mã và nhiều dòng mã
ngày giờ