- vừa được xem lúc

Tính thời gian chạy code trong Python dễ ợt với module timeit

0 0 14

Người đăng: Nguyen Tuan Anh K

Theo Viblo Asia

Xin chào mọi người, hôm nay mình xin giới thiệu một module rất hữu dụng trong việc đo lường thời gian chạy các code snippet nhỏ: timeit.

I. Các cách sử dụng

  • Module timeit có thể được sử dụng qua CLI:

    Ex:

    python3 -m timeit 'print ([n**2 for n in range(1000)])'

  • Hoặc có thể được gọi trong code Python:

    Ex:

 >>> import timeit >>> def some_computation(): ... arr = [n*2+1 for n in range(100)] ... print(len(arr)) ... >>> timeit.timeit(some_computation, number=500)

II. Các hàm được cung cấp

Như có thể thấy thì bằng việc gọi timeit.timeit, bạn đã có thể tính toán số thời gian chạy của 1 hàm. Module timeit cung cấp 3 hàm khá tiện lợi và 1 public class Timer.

  1. Class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>, globals=None)

Đây là phần khung xương của cả module. Hầu hết các hàm khác của module này đều chỉ là một hàm bọc ngoài cho class này. Class Timer có thể nhận vào vài tham số. Statement (stmt) - là đoạn code hoặc hàm mà bạn muốn thực thi, setup - là đoạn code mà muốn chạy để chuẩn bị 1 số thứ trước khi tính thời gian. Lưu ý là hai hàm này có thể là một chuỗi tách nhau bởi dấu ; .

Ex:

>>> timeit.timeit("a = 0; a += sum((n for n in range(100)))", number=5)

timer là hàm tính thời gian và được đặt mặc định là <default timer> của module. Cuối cùng, globals là tham số dùng để xác định namespace mà bạn thực thi hàm ( mặc định là được thực thi trong namespace của timeit).

  1. Hàm timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)

Hàm này sẽ tạo ra 1 Instance của class Timer, rồi truyền vào class này các tham số mà class yêu cẩu như trên. Có thể thấy có một tham số mới là number, bạn có thể dùng tham số này để xác định số lần mà bạn sẽ chạy hàm.

  1. Hàm timeit.repeat(stmt='pass', setup='pass', timer=<default timer>, repeat=5, number=1000000, globals=None)

Tương tự như trên thì hàm này cũng sẽ tạo ra 1 Instance của class Timer. với các tham số truyền vào. Lần này thêm 1 tham số là repeat bên cạnh number. Có thể thấy hai tham số repeatnumber dễ gây ra rối. Bạn có thể hiểu hai tham số này như sau: repeat là số lần mà bạn chạy cả hàm timeit, còn number là số lần mà bạn chạy đoạn code mà bạn muốn đo lường. Ví dụ :

>>> timeit.repeat("a = 0; a += sum((n for n in range(100)))", number=5, repeat=6)
[4.750300013256492e-05, 3.776699986701715e-05, 8.781899987297948e-05, 7.135699979698984e-05, 3.9323000237345695e-05, 3.5535999813873786e-05]

Có thể thấy ở trên, hàm timeit được lặp lại 6 lần và trả ra 6 kết quả khác nhau, mỗi lần chạy, hàm timeit chạy đoạn code mà mình đã truyền vào 5 lần.

  1. timeit.default_timer() Hàm này sẽ xác định hàm timer của module, luôn luôn là time.perf_counter().

III. Chạy module từ CLI

Cú pháp chạy hàm timeit từ CLI như sau

python -m timeit [-n N] [-r N] [-u U] [-s S] [-h] [statement ...]

Các tham số theo thứ tự như sau:

  • -n hoặc --number=N

    Số lần mà hàm timeit sẽ chạy đoạn code của bạn

  • -r hoặc --repeat=N

    Số lần mà bạn muốn hàm timeit chạy

  • -s hoặc --setup=S

    Đây sẽ là đoạn code mà bạn muốn chạy để setup những thứ cần thiết cho đoạn code được đo lường.

  • -p hoặc --process

    Đây là cách để sử dụng hàm tính thời gian khác time.process_time() thay vì hàm mặc định là time.perf_counter()

  • -u hoặc --unit=U

    Đơn vị thời gian mà bạn muốn hiển thị ra. Có thể dùng nsec, usec, msec hoặc sec

Đó là tóm tắt của mình về module timeit. Bạn có thể đọc thêm ở đây. Cảm ơn vì đã đọc và chúc bạn tính thời gian hàm chạy của mình vui vẻ.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Thao tác với File trong Python

Python cung cấp các chức năng cơ bản và phương thức cần thiết để thao tác các file. Bài viết này tôi xin giới thiệu những thao tác cơ bản nhất với file trong Python.

0 0 63

- vừa được xem lúc

Tập tành crawl dữ liệu với Scrapy Framework

Lời mở đầu. Chào mọi người, mấy hôm nay mình có tìm hiểu được 1 chút về Scrapy nên muốn viết vài dòng để xem mình đã học được những gì và làm 1 demo nho nhỏ.

0 0 166

- vừa được xem lúc

Sử dụng Misoca API (oauth2) với Python

Với bài viết này giúp chúng ta có thể nắm được. ・Tìm hiểu cách xử lý API misoca bằng Python.

0 0 49

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 3)

Tiếp tục phần 2 của series Pandas DataFrame nào. Let's go!!. Ở phần trước, các bạn đã biết được cách lấy dữ liệu một row hoặc column trong Pandas DataFame rồi phải không nào. 6 Hoc.

0 0 63

- vừa được xem lúc

Lập trình socket bằng Python

Socket là gì. Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó tiến hành kết nối giữa client và server.

0 0 79

- vừa được xem lúc

[Series Pandas DataFrame] Phân tích dữ liệu cùng Pandas (Phần 2)

Nào, chúng ta cùng đến với phần 2 của series Pandas DataFrame. Truy xuất Labels và Data. Bạn đã biết cách khởi tạo 1 DataFrame của mình, và giờ bạn có thể truy xuất thông tin từ đó. Với Pandas, bạn có thể thực hiện các thao tác sau:.

0 0 95