Python: Giải thích hàm Sleep

430

Bài viết được sự cho phép của tác giả Phạm Văn Nguyên

Trong Python hoặc bất kỳ ngôn ngữ lập trình nào khác, đôi khi bạn muốn thêm thời gian trễ trong chương trình của mình trước khi bạn tiếp tục đến phần tiếp theo của mã.

Nếu đây là những gì bạn muốn làm, thì bạn nên sử dụng chức năng sleep từ module time .

  10 Lý do nên học Python trong năm 2021
  11 tip học Python dành cho các “newbie”

Đầu tiên, tôi sẽ bắt đầu bằng cách thảo luận về cách sử dụng chức năng sleep của Python . Sau đó tôi sẽ nói nhiều hơn về một số câu hỏi thường gặp và cách thức thực hiện của function(hàm) sleep.

Hàm sleep

Giống như tôi đã đề cập, Sleep là một hàm tích hợp Python trong mô-đun time .

Vì vậy, để sử hàm sleep , bạn sẽ cần import module time trước.

Hàm sleep có  một đối số là khoảng thời gian tính bằng giây mà bạn dừng.

Sử dụng hàn sleep trong Python 2 và Python 3 hoàn toàn giống nhau, vì vậy bạn sẽ không cần phải lo lắng về phiên bản Python nào mà mã của bạn đang chạy.

Nó thực sự rất đơn giản và dễ hiểu. Chúng ta hãy đi qua một số ví dụ.

Python 2

Giả sử bạn muốn hàn sleep để thêm độ trễ 10 giây.

Trong ví dụ sau, tôi in ra thời gian đã trôi qua giữa việc gọi hàm sleep và sau khi nó trả về .

import time# record start timestart_time = time.time()# sleep for 10 secondstime.sleep(10)# print elapsed timeelapsed_time = time.time() - start_timeprint(elapsed_time)# output: 10.000149965286255

Như bạn có thể thấy, thời gian trôi qua rất gần với 10 giây, đó là những gì chúng ta mong đợi.

Python 3

Không có thay đổi trong Python 3.

Bạn có thể sử dụng hàm sleep trong Python 2 chính xác như bạn làm trong Python 2.

Các câu hỏi thường gặp

Câu hỏi: Làm thế nào để sử dụng hàm sleep để sleep trong một khoảng thời gian ít hơn một giây, ví dụ như mili giây hoặc micro giây?

Câu hỏi tuyệt vời.

Hàm sleep thực sự lấy số dấu phẩy động làm đối số, không phải là số nguyên.

Và điều đó có nghĩa là, bạn có thể truyền tham số đầu vào là số thập phân.

Ví dụ:

import time# sleep for half a secondtime.sleep(0.5)# sleep for 1 millisecondtime.sleep(1 * 10**(-3))# sleep for 1 microsecondtime.sleep(1 * 10**(-6))

Câu hỏi: Làm thế nào để sử dụng hàm sleep để sleep cho đến một thời gian cụ thể?

Đây là một câu hỏi rất phổ biến.

Tùy thuộc vào những gì bạn đang cố gắng làm, có hai cách khác nhau để đạt được điều này.

Cách đơn giản là tính toán trước độ trễ (tính bằng giây) cho đến thời gian cụ thể đó trước khi bạn gọi hàm sleep.

Một cách khác là sử dụng hàm event.wait từ module event .

Nếu những gì bạn đang cố gắng làm là chặn một luồng cho đến khi một điều kiện(condition) xảy ra, thì tốt hơn là sử dụng Wait () .

Câu hỏi: [Nâng cao] Sleep thực sự được thực hiện như thế nào?

Đây là một câu hỏi tuyệt vời.

sleep không thực sự được thực hiện bởi Python.

Vâng, nó là, nhưng nó chỉ đơn giản là một trình bao bọc xung quanh một cái gì đó khác được Hệ điều hành triển khai.

Tất cả các hệ điều hành đều có lệnh gọi hệ thống(system call) là Sleep () .

Nếu bạn không biết System Call là gì, thì bạn nên làm!

Đây là cuốn sách mà tôi khuyên bạn nên tìm hiểu về các khái niệm Hệ điều hành.

Nhưng dù bằng cách nào, bạn có thể nghĩ về Cuộc gọi hệ thống như một API hoặc giao diện mà HĐH cung cấp cho các chương trình không gian người dùng để tương tác với HĐH.

Vậy HĐH sẽ làm gì khi nhận được System call sleep?

Về cơ bản, hệ điều hành sẽ làm là nó sẽ tạm dừng quá trình (chương trình của bạn) được lên lịch trên CPU trong khoảng thời gian mà bạn đã chỉ định.

Lưu ý rằng điều này hoàn toàn khác với việc thêm độ trễ bằng cách sử dụng vòng lặp giả không làm gì cả (đó là điều bạn KHÔNG BAO GIỜ nên làm).

Trong trường hợp giả cho vòng lặp, quy trình của bạn thực sự vẫn đang chạy trên CPU.

Nhưng trong trường hợp Sleep () , quy trình của bạn sẽ không hoạt động trong một thời gian cho đến khi HĐH bắt đầu lập lịch lại trên CPU.

Bài viết gốc được đăng tải tại nguyenpv.com

Có thể bạn quan tâm:

Xem thêm các vị trí python tuyển dụng hấp dẫn tại TopDev