Làm thế nào để bạn kiểm tra số phút trong python?

Để đo lường hiệu suất của mã, chúng ta cần tính thời gian mà tập lệnh/chương trình cần để thực thi. Việc đo lường thời gian thực thi của một chương trình hoặc các phần của chương trình sẽ phụ thuộc vào hệ điều hành, phiên bản Python của bạn và ý nghĩa của từ 'thời gian'

Trước khi tiếp tục, trước tiên, hãy hiểu thời gian là gì

Mục lục

  • Thời gian treo tường vs. thời gian CPU
  • Cách đo thời gian thực hiện trong Python
    • Thí dụ. Nhận thời gian thực hiện chương trình tính bằng giây
    • Nhận thời gian thực hiện tính bằng mili giây
    • Nhận thời gian thực hiện tính bằng phút
  • Nhận thời gian thực thi CPU của chương trình bằng process_time[]
  • mô-đun timeit để đo thời gian thực thi mã
    • Thí dụ. Đo thời gian thực hiện của một chức năng
    • Đo thời gian thực hiện của một dòng mã
    • Đo thời gian thực hiện của nhiều dòng mã
  • Mô-đun DateTime để xác định thời gian thực thi của tập lệnh
  • Sự kết luận

Thời gian treo tường vs. thời gian CPU

Chúng ta thường bắt gặp hai thuật ngữ để đo thời gian thực hiện. Thời gian đồng hồ treo tường và thời gian CPU

Vì vậy, điều cần thiết là xác định và phân biệt hai thuật ngữ này

  • Wall time [còn được gọi là clock time hoặc wall-clock time] chỉ đơn giản là tổng thời gian trôi qua trong quá trình đo. Đó là thời gian bạn có thể đo bằng đồng hồ bấm giờ. Đó là sự khác biệt giữa thời điểm chương trình kết thúc thực thi và thời điểm chương trình bắt đầu. Nó cũng bao gồm thời gian chờ tài nguyên
  • Mặt khác, Thời gian CPU đề cập đến thời gian CPU bận xử lý các hướng dẫn của chương trình. Thời gian chờ đợi tác vụ khác hoàn thành [như thao tác I/O] không được tính vào thời gian của CPU. Nó không bao gồm thời gian chờ tài nguyên

Sự khác biệt giữa Wall time và CPU time có thể xảy ra do sự phụ thuộc vào kiến ​​trúc và thời gian chạy, e. g. , độ trễ được lập trình hoặc chờ tài nguyên hệ thống khả dụng

Ví dụ, một chương trình báo cáo rằng nó đã sử dụng “CPU time 0m0. 2s, Thời gian treo tường 2m4s”. Nó có nghĩa là chương trình đã hoạt động trong 2 phút 4 giây. Tuy nhiên, bộ xử lý của máy tính chỉ tiêu tốn 0. 2 giây thực hiện phép tính cho chương trình. Có thể chương trình đang chờ một số tài nguyên có sẵn

Khi bắt đầu mỗi giải pháp, tôi đã liệt kê rõ ràng loại thời gian mà mỗi phương pháp đo lường

Vì vậy, tùy thuộc vào lý do tại sao bạn đo thời gian thực hiện chương trình của mình, bạn có thể chọn tính toán thời gian Tường hoặc CPU

Cách Đo lường Thời gian thực thi bằng Python

Mô-đun thời gian của Python cung cấp các chức năng liên quan đến thời gian khác nhau, chẳng hạn như nhận thời gian hiện tại và tạm dừng thực thi chuỗi cuộc gọi trong số giây đã cho. Các bước dưới đây trình bày cách sử dụng mô-đun thời gian để tính toán thời gian thực hiện chương trình

  1. Nhập mô-đun thời gian

    Mô-đun thời gian đi kèm với thư viện chuẩn của Python. Đầu tiên, Nhập nó bằng câu lệnh nhập

  2. Lưu trữ thời gian bắt đầu

    Bây giờ, chúng ta cần lấy thời gian bắt đầu trước khi thực hiện dòng đầu tiên của chương trình. Để làm điều này, chúng ta sẽ sử dụng hàm

    # get execution time in milliseconds
    res = et - st
    final_res = res * 1000
    print['Execution time:', final_res, 'milliseconds']
    0 để lấy thời gian hiện tại và lưu trữ nó trong biến ‘ start_time ‘ trước dòng đầu tiên của chương trình.
    Hàm
    # get execution time in milliseconds
    res = et - st
    final_res = res * 1000
    print['Execution time:', final_res, 'milliseconds']
    0 của mô-đun thời gian được sử dụng để lấy thời gian tính bằng giây kể từ kỷ nguyên. Việc xử lý các giây nhuận phụ thuộc vào nền tảng.

  3. Lưu trữ thời gian kết thúc

    Tiếp theo, chúng ta cần lấy thời gian kết thúc trước khi thực hiện dòng cuối cùng.
    Một lần nữa, chúng ta sẽ sử dụng hàm

    # get execution time in milliseconds
    res = et - st
    final_res = res * 1000
    print['Execution time:', final_res, 'milliseconds']
    0 để lấy thời gian hiện tại và lưu vào biến ‘ end_time ‘ trước dòng cuối cùng của chương trình.

  4. Tính toán thời gian thực hiện

    Sự khác biệt giữa thời gian kết thúc và thời gian bắt đầu là thời gian thực hiện. Nhận thời gian thực hiện bằng cách trừ thời gian bắt đầu từ thời gian kết thúc

Thí dụ. Nhận thời gian thực hiện chương trình tính bằng giây

Sử dụng giải pháp này trong các trường hợp sau. –

  • Xác định thời gian thực hiện của một tập lệnh
  • Đo thời gian giữa các dòng mã

Ghi chú. Giải pháp này đo Wall time, tôi. e. , tổng thời gian đã trôi qua, không phải thời gian của CPU

import time

# get the start time
st = time.time[]

# main program
# find sum to first 1 million numbers
sum_x = 0
for i in range[1000000]:
    sum_x += i

# wait for 3 seconds
time.sleep[3]
print['Sum of first 1 million numbers is:', sum_x]

# get the end time
et = time.time[]

# get the execution time
elapsed_time = et - st
print['Execution time:', elapsed_time, 'seconds']

đầu ra

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds

Ghi chú. Nó sẽ báo thêm thời gian nếu máy bạn đang bận công việc khác. Nếu tập lệnh của bạn đang chờ một số tài nguyên, thời gian thực hiện sẽ tăng lên vì thời gian chờ sẽ được thêm vào kết quả cuối cùng

Nhận thời gian thực hiện tính bằng mili giây

Sử dụng ví dụ trên để lấy thời gian thực hiện tính bằng giây, sau đó nhân nó với 1000 để có kết quả cuối cùng tính bằng mili giây

Thí dụ

# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']

đầu ra

Sum of first 1 million numbers is: 499999500000
Execution time: 3125.988006591797 milliseconds

Nhận thời gian thực hiện tính bằng phút

Sử dụng ví dụ trên để lấy thời gian thực hiện tính bằng giây, sau đó chia cho 60 để có kết quả cuối cùng tính bằng phút

Thí dụ

# get execution time in minutes
res = et - st
final_res = res / 60
print['Execution time:', final_res, 'minutes']

đầu ra

________số 8

Bạn có muốn định dạng tốt hơn?

Sử dụng hàm strftime[] để chuyển đổi thời gian ở định dạng dễ đọc hơn như [hh-mm-ss] giờ-phút-giây

import time

st = time.time[]
# your code
sum_x = 0
for i in range[1000000]:
    sum_x += i
time.sleep[3]
print['Sum:', sum_x]

elapsed_time = time.time[] - st
print['Execution time:', time.strftime["%H:%M:%S", time.gmtime[elapsed_time]]]

đầu ra

# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
0

Nhận thời gian thực thi CPU của chương trình bằng cách sử dụng
# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
3

# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
4 sẽ đo thời gian của đồng hồ treo tường. Nếu bạn muốn đo thời gian thực hiện CPU của một chương trình, hãy sử dụng
# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
5 thay vì
# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
4

Sử dụng giải pháp này nếu bạn không muốn đưa thời gian chờ tài nguyên vào kết quả cuối cùng. Hãy xem cách lấy thời gian thực thi CPU của chương trình

# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
5

đầu ra

# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
6

Ghi chú

Vì chúng ta đang tính toán thời gian thực hiện CPU của một chương trình, như bạn có thể thấy, chương trình đã hoạt động trong hơn 3 giây. Tuy nhiên, 3 giây đó không được thêm vào thời gian của CPU vì CPU là lý tưởng và bộ xử lý của máy tính chỉ tiêu tốn 0. 23 giây thực hiện phép tính cho chương trình

mô-đun timeit để đo thời gian thực thi mã

Mô-đun timeit Python cung cấp một cách đơn giản để định thời gian cho một đoạn mã Python nhỏ. Nó có cả Giao diện dòng lệnh cũng như giao diện có thể gọi được. Nó tránh được nhiều bẫy phổ biến để đo thời gian thực hiện

mô-đun timeit hữu ích trong các trường hợp sau. –

  • Xác định thời gian thực hiện của một đoạn mã nhỏ như hàm và vòng lặp
  • Đo thời gian giữa các dòng mã

Hàm

# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
7. –

# get execution time in milliseconds
res = et - st
final_res = res * 1000
print['Execution time:', final_res, 'milliseconds']
8 trả về thời gian [tính bằng giây] để thực thi mã số lần

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
0

Ghi chú. Giải pháp này đo Wall time, tôi. e. , tổng thời gian đã trôi qua, không phải thời gian của CPU

Các bước dưới đây cho thấy cách đo thời gian thực thi mã bằng mô-đun timeit

  • Đầu tiên, tạo một phiên bản Timer bằng cách sử dụng hàm
    # get execution time in milliseconds
    res = et - st
    final_res = res * 1000
    print['Execution time:', final_res, 'milliseconds']
    7
  • Tiếp theo, Truyền mã vào vị trí của đối số
    Sum of first 1 million numbers is: 499999500000
    Execution time: 3125.988006591797 milliseconds
    0. stmt là mã mà chúng tôi muốn đo thời gian
  • Tiếp theo, nếu bạn muốn thực thi một vài câu lệnh trước mã thực của mình, hãy chuyển chúng vào đối số thiết lập như câu lệnh nhập
  • Để đặt giá trị bộ đếm thời gian, chúng tôi sẽ sử dụng bộ đếm thời gian mặc định do Python cung cấp
  • Tiếp theo, quyết định số lần bạn muốn thực thi mã và chuyển nó vào đối số số. Giá trị mặc định của số là 1.000.000
  • Cuối cùng, chúng ta sẽ thực thi hàm
    # get execution time in milliseconds
    res = et - st
    final_res = res * 1000
    print['Execution time:', final_res, 'milliseconds']
    7 với các giá trị trên để đo thời gian thực thi code

Thí dụ. Đo thời gian thực hiện của một chức năng

Sau đây chúng ta sẽ tính thời gian thực hiện của hàm ‘addition[]’. Chúng ta sẽ chạy hàm

Sum of first 1 million numbers is: 499999500000
Execution time: 3125.988006591797 milliseconds
2 năm lần để lấy thời gian thực hiện trung bình

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
1

đầu ra

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
2

Ghi chú

Nếu bạn chạy code tốn thời gian với giá trị mặc định là

Sum of first 1 million numbers is: 499999500000
Execution time: 3125.988006591797 milliseconds
3 thì sẽ rất mất thời gian. Vì vậy, hãy gán ít giá trị hơn cho đối số
Sum of first 1 million numbers is: 499999500000
Execution time: 3125.988006591797 milliseconds
3 Hoặc quyết định bạn muốn đo bao nhiêu mẫu để có được thời gian thực thi mã chính xác

  • Các chức năng
    # get execution time in milliseconds
    res = et - st
    final_res = res * 1000
    print['Execution time:', final_res, 'milliseconds']
    7 vô hiệu hóa trình thu gom rác, giúp ghi lại thời gian chính xác
  • Ngoài ra, bằng cách sử dụng chức năng
    # get execution time in milliseconds
    res = et - st
    final_res = res * 1000
    print['Execution time:', final_res, 'milliseconds']
    7, chúng tôi có thể lặp lại việc thực thi cùng một mã bao nhiêu lần tùy ý, điều này giảm thiểu ảnh hưởng của các tác vụ khác đang chạy trên hệ điều hành của bạn. Do đó, chúng tôi có thể nhận được thời gian thực hiện trung bình chính xác hơn

Đo thời gian thực hiện của một dòng mã

Chạy lệnh

Sum of first 1 million numbers is: 499999500000
Execution time: 3125.988006591797 milliseconds
7 trên sổ ghi chép dòng lệnh hoặc jupyter để biết thời gian thực hiện của một dòng mã

Thí dụ. Sử dụng

Sum of first 1 million numbers is: 499999500000
Execution time: 3125.988006591797 milliseconds
7 ngay trước dòng mã

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
3

Ngoài ra, chúng tôi có thể tùy chỉnh lệnh bằng các tùy chọn khác nhau để nâng cao cấu hình và nắm bắt thời gian thực hiện chính xác hơn

  • Xác định số lần chạy bằng tùy chọn
    Sum of first 1 million numbers is: 499999500000
    Execution time: 3125.988006591797 milliseconds
    9. Ví dụ,
    # get execution time in minutes
    res = et - st
    final_res = res / 60
    print['Execution time:', final_res, 'minutes']
    0 có nghĩa là chạy dòng mã 10 lần
  • Xác định các vòng lặp trong mỗi lần chạy bằng tùy chọn
    Sum of first 1 million numbers is: 499999500000
    Execution time: 3125.988006591797 milliseconds
    9 và
    # get execution time in minutes
    res = et - st
    final_res = res / 60
    print['Execution time:', final_res, 'minutes']
    2
  • Nếu bạn bỏ qua các tùy chọn, hãy để mặc định là 7 lần chạy với mỗi lần chạy có 1 triệu vòng lặp

Thí dụ. Tùy chỉnh hoạt động của cấu hình thời gian thành 10 lần chạy và 20 vòng lặp trong mỗi lần chạy

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
4

Đo thời gian thực hiện của nhiều dòng mã

Sử dụng lệnh

# get execution time in minutes
res = et - st
final_res = res / 60
print['Execution time:', final_res, 'minutes']
3, chúng ta có thể đo thời gian thực thi của nhiều dòng mã. Các tùy chọn lệnh sẽ giữ nguyên

Ghi chú. bạn cần thay thế tỷ lệ phần trăm đơn [

# get execution time in minutes
res = et - st
final_res = res / 60
print['Execution time:', final_res, 'minutes']
4] bằng tỷ lệ phần trăm kép [
# get execution time in minutes
res = et - st
final_res = res / 60
print['Execution time:', final_res, 'minutes']
5] trong lệnh timeit để lấy thời gian thực thi của nhiều dòng mã

Thí dụ

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
5

Mô-đun DateTime để xác định thời gian thực thi của tập lệnh

Ngoài ra, bạn có thể sử dụng mô-đun Datetime để đo thời gian chạy chương trình. Sử dụng các bước dưới đây.
Nhập mô-đun DateTime

  • Tiếp theo, lưu trữ thời gian bắt đầu bằng hàm
    # get execution time in minutes
    res = et - st
    final_res = res / 60
    print['Execution time:', final_res, 'minutes']
    6 trước dòng đầu tiên của tập lệnh
  • Tiếp theo, lưu thời gian kết thúc trước khi sử dụng chức năng tương tự trước dòng cuối cùng của tập lệnh
  • Cuối cùng, tính thời gian thực hiện bằng cách lấy thời gian kết thúc trừ thời gian bắt đầu

Ghi chú. Giải pháp này đo Wall time, tôi. e. , tổng thời gian đã trôi qua, không phải thời gian của CPU

Thí dụ

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
6

đầu ra

Sum of first 1 million numbers is: 499999500000
Execution time: 3.125561475753784 seconds
7

Sự kết luận

Python cung cấp một số chức năng để lấy thời gian thực thi mã. Ngoài ra, chúng tôi đã tìm hiểu sự khác biệt giữa thời gian của Đồng hồ treo tường và thời gian của CPU để hiểu thời gian thực thi nào chúng tôi cần đo

Chủ Đề