Thời gian lập hồ sơ Python
Công cụ phổ biến nhất để đo điểm chuẩn thời gian của mã Python, mô-đun timeit tích hợp cung cấp nhiều hơn những gì hầu hết Pythonistas biết Show So sánh điểm chuẩn hiếm khi được thực hiện vì niềm vui của nó, ngay cả khi nó thực sự rất thú vị. Ngoài niềm vui này, nó có thể giúp bạn trong
Nếu bạn nghĩ rằng mình dành quá nhiều thời gian để đo điểm chuẩn một số đoạn mã ngẫu nhiên, đừng lo lắng. Tôi đã từng ở đó. Thành thật mà nói, tôi vẫn làm điều đó khá thường xuyên. Đừng xấu hổ về điều này. Điểm chuẩn giúp bạn hiểu được sự phức tạp của ngôn ngữ. Theo thời gian, bạn sẽ nhận thấy rằng bạn có thể đoán tốc độ nhanh hay chậm của một đoạn trích cụ thể. Tuy nhiên, đôi khi, ngay cả “cái mũi đo điểm chuẩn” của bạn cũng sẽ đánh lừa bạn, vì vậy việc đo điểm chuẩn thường được sử dụng hợp lý. Rốt cuộc thì lập trình rất thú vị phải không? Có thể mô-đun phổ biến nhất để đo điểm chuẩn các đoạn mã trong Python, xét về thời gian thực hiện, là mô-đun
Vì vậy, tôi nghĩ rằng nếu bạn muốn sử dụng những công cụ khác này, trước tiên bạn nên học cách sử dụng Hầu hết người dùng không biết rằng mô-đun
Cả hai API đều sử dụng các chức năng giống nhau, nhưng khác nhau. Hai chức năng bạn nên biết là Cách sử dụng đơn giản nhất như sau Và đó là nó. Nó sẽ đo thời gian thực thi của đoạn mã được cung cấp dưới dạng chuỗi. Trong trường hợp của chúng tôi, đó là Hãy phân tích chữ ký của chức năng
Đối với các đoạn trích nhỏ và nhanh, không cần thay đổi Tuy nhiên, đối với các đoạn trích dài hơn, bạn có thể muốn giảm Ở trên, chúng tôi đã sử dụng API dựa trên đoạn trích. Đã đến lúc thảo luận về API dựa trên khả năng gọi hiếm khi được biết đến Bạn có thể nghĩ rằng hai lệnh gọi Cuộc gọi đầu tiên từ các cuộc gọi trên tương đương với Trên máy của tôi (32 GB, bốn lõi vật lý và tám lõi logic, chạy trong WSL 1), tôi nhận được các kết quả sau Sự khác biệt là khá nhỏ, phải không? . Một lần nữa, Đối với việc so sánh hai API, hãy nhớ
Cái nào để chọn? . Nếu bạn muốn so sánh thời gian thực hiện của hai chức năng, thì đây chính xác là mục đích mà API dựa trên có thể gọi được đã tạo ra. Hoặc, khi trong mã của bạn, bạn làm điều gì đó (e. g. , phân bổ một danh sách, như trên) trong một hàm, thì API dựa trên có thể gọi được sẽ phản ánh tình hình thực tế tốt hơn. Tuy nhiên, nếu bạn chỉ muốn so sánh hai đoạn mã, thì không cần sử dụng hàm cho điều đó. Tuy nhiên, hãy nhớ về phạm vi. Khi bạn đóng gói mã của mình bên trong một hàm, tất cả điều đó sẽ được thực hiện trong phạm vi cục bộ và không gian tên của hàm này. Như tôi sẽ trình bày sau, điều này có thể tạo nên sự khác biệt Thí dụ. Tạo một từ điển trốngBây giờ, hãy tưởng tượng chúng ta muốn đánh giá hai cách để tạo một từ điển trống. dự đoán của bạn là gì? Nếu bạn đã bình chọn cho nghĩa đen là nhanh hơn, bạn đã hiểu đúng. Trên máy của tôi, Như bạn thấy, Thật thú vị, nếu bạn tạo chức năng của riêng mình như sau bạn sẽ thấy nó nhanh hơn chính hàm Bạn có thể thắc mắc tại sao tôi lại sử dụng giá trị nhỏ nhất, không phải giá trị trung bình, để so sánh hai kết quả điểm chuẩn (xem hàm Điều này là do điểm chuẩn không phải là một tình huống bình thường, vì vậy chúng ta không nên áp dụng phương pháp thống kê điển hình để phân tích kết quả của nó. Trong điều kiện tốt nhất, tất cả các lần chạy của cùng một mã (không bao gồm tính ngẫu nhiên) sẽ mất cùng thời gian. Tuy nhiên, hệ điều hành đang thực hiện nhiều tác vụ khác nhau trong quá trình đo điểm chuẩn, vì vậy các lần đo điểm chuẩn tiếp theo sẽ mất nhiều thời gian khác nhau. Hãy nhớ rằng điều này không phải do bản thân mã mà do các quy trình của hệ điều hành Do đó, chúng ta nên lấy giá trị tối thiểu, vì nó là giá trị gần nhất với thời gian thực hiện thực tế, không có bất kỳ sự gián đoạn nào. Tương tự như vậy, chúng ta không nên chú ý đến sự thay đổi trong kết quả trong các lần chạy. Chúng không đo lường mức độ biến đổi của thời gian thực thi thực tế của đoạn mã cụ thể này; . Thay vào đó, sự thay đổi như vậy thay vì đo mức độ thay đổi của các quy trình khác, những quy trình được điều hành bởi hệ điều hành; . Đây là lý do tại sao phân tích điểm chuẩn khác rất nhiều so với phân tích các loại dữ liệu khác và đó là lý do tại sao giá trị tối thiểu là thước đo tốt hơn để thể hiện kết quả của điểm chuẩn so với bất kỳ thước đo xu hướng trung tâm nào Một vi dụ khacHãy xem xét một kịch bản phức tạp hơn. Lần này, chúng tôi sẽ sử dụng Một lần nữa, trước khi chạy mã, hãy phân tích mã và thử đoán chức năng nào sẽ nhanh hơn. (Lần này không đơn giản như vậy, vì bạn cần biết mô-đun Lưu ý rằng bạn có thể đơn giản hóa đoạn mã trên một chút nhưng. Đơn giản hóa như vậy có ý nghĩa đặc biệt là khi bạn có nhiều đoạn để so sánh Ở đây, Trước đây, tôi đã hứa với bạn sẽ hiển thị một ví dụ khi API dựa trên có thể gọi được có ý nghĩa hơn so với API dựa trên đoạn trích. Đây là một tình huống như vậy. Lưu ý rằng lần này việc sử dụng các hàm trông tự nhiên hơn so với việc sử dụng các đoạn mã, bởi vì các đoạn mã trên chỉ đơn giản là gọi các hàm Các hàm lấy một đối số, điều này làm cho việc sử dụng API dựa trên có thể gọi trở nên phức tạp hơn một chút. Chúng tôi cần sử dụng Chúng tôi không cần sử dụng Bạn nên biết giá trị mà Bạn phải nhớ những gì tôi đã đề cập trước đây. Các hàm Hãy xem xét một ví dụ. Hãy tưởng tượng bạn muốn so sánh một biểu thức trình tạo với danh sách tương ứng. Giả sử, bạn sẽ tiêu thụ hai vật phẩm trong một vòng lặp Và chúng tôi nhận được Hoặc là nó? Bất cứ khi nào bạn thấy kết quả điên rồ như vậy, hãy kiểm tra kỹ mã. Tôi không nói rằng những kết quả như vậy không bao giờ xảy ra; Bạn có thấy vấn đề trong mã này không? . Có gì đó không ổn với nó Vấn đề là kết quả của việc sử dụng một máy phát điện. Bạn chỉ có thể sử dụng trình tạo một lần và sau đó trình tạo sẽ trống. Vì vậy, trong mã này, nó chỉ được lặp lại một lần và sau đó nó không được lặp lại nữa vì lý do đơn giản là nó trống. Tuy nhiên, danh sách được lặp đi lặp lại mỗi lần Đó là lý do tại sao đoạn mã tương ứng mất rất nhiều thời gian. Vòng lặp Chúng ta có thể giải nó một cách dễ dàng, sử dụng Tôi đã nhân kết quả với Bây giờ chúng ta có Tình huống tương tự có thể xảy ra khi bạn thao tác trên một đối tượng có thể thay đổi. Nếu nó bị ảnh hưởng trong mọi cuộc gọi, thì cuộc gọi tiếp theo sẽ hoạt động với phiên bản cập nhật này của đối tượng, không phải phiên bản gốc. Do đó, mỗi cuộc gọi hoạt động với một đối tượng khác nhau. Một ví dụ có thể là đánh giá cách thức hoạt động của Python cung cấp các lựa chọn thay thế điểm chuẩn thời gian khác nhau. Ba trong số đó mà tôi muốn chỉ ra là
Phần kết luận Mô-đun Theo thời gian, bạn sẽ nhận thấy rằng thường thì mã được tối ưu hóa đến từng chi tiết không thực sự quan trọng. Ví dụ: có thực sự quan trọng nếu bạn tìm cách tiết kiệm 10 mili giây khi mã kéo dài 10 giờ không? Để tóm tắt
Cảm ơn vì đã đọc. Tôi hy vọng bạn thích bài viết và mô-đun Làm cách nào để sử dụng Timeit trong Python?Đây là một hàm dựng sẵn trong Python dùng để đo thời gian thực thi một đoạn mã Python nhỏ. . Syntax. timeit.timeit(setup = Thông số. → thiết lập. mã cần chạy trước stmt. Giá trị mặc định là 'vượt qua'. → hẹn giờ. thời gian. . Thí dụ. Mã số. # kiểm tra thời gian() Làm cách nào để kiểm tra thời gian thực thi Python?Để tính thời gian thực thi mã, mô-đun thời gian có thể được sử dụng. . Lưu dấu thời gian ở đầu mã bắt đầu sử dụng time() Lưu dấu thời gian ở cuối mã Tìm sự khác biệt giữa kết thúc và bắt đầu, cho biết thời gian thực hiện Timeit có được bao gồm trong Python không?time(). Vì vậy nó không chính xác trong khi so sánh các chức năng. Để giải quyết vấn đề này, Python có một mô-đun timeit dùng để đo thời gian thực thi của các đoạn mã lớn và nhỏ. Ở đây trong bài viết này, trước tiên chúng ta hãy xem thư viện timeit trong python bằng một số ví dụ. |