Hướng dẫn python time sleep - thời gian ngủ của trăn

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 .sleep từ module time .

Hướng dẫn python time sleep - thời gian ngủ của trăn

Đầ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.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.

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.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 () .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 () .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:

  • Viết chương trình Xoá các File trùng lặp bằng Python
  • Hàm Python do người dùng tự định nghĩa

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

Đã đăng vào thg 6 23, 2020 1:38 SA 4 phút đọc 4 phút đọc 4 phút đọc

Đã bao giờ bạn cần chương trình của bạn chờ một cái gì đó? Thường thì bạn sẽ muốn các đoạn code được xử lý càng nhanh càng tốt. Nhưng cũng có khi để code "ngủ" chính là những gì bạn quan tâm.

Ví dụ, bạn có thể sử dụng

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))
8 để tạo độ trễ trong chương trình của bạn. Có thể bạn cần chờ một file được upload hoặc download, hoặc chờ một một biểu đồ được load hoặc vẽ lên trên màn hình. Thậm chí, có thể bạn cần tạm dừng những các lượt gọi tới một API web, hoặc giữa các câu truy vấn (query) tới database.

Trong tutorial này, bạn sẽ tìm hiểu cách thêm các lời gọi hàm

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))
8 với:

  • $ python3 -m timeit -n 3 "import time; time.sleep(3)"
    3 loops, best of 3: 3 sec per loop
    
    0
  • Decorator
  • Thread
  • Async IO
  • Graphical User Interface

Chú ý bài viết này dành cho các lập trình viên trung cấp (intermediate)!

Adding a Python 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))8 Call With $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 3: 3 sec per loop 0

Python có hỗ trợ sẵn cho việc "đưa" chương trình của bạn vào giấc ngủ. Hàm

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))
8 thuộc module

$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
0 được sử dụng để tạm dừng luồng xử lý của thread gọi tới nó bao lâu bạn muốn.

Đây là một ví dụ về cách sử dụng nó:

>>> import time
>>> time.sleep(3) # Sleep for 3 seconds

Nếu bạn chạy đoạn code trên trong console, bạn sẽ phải đợi một chút trước khi bạn muốn thêm vào một câu lệnh mới.

Note: Trong Python 3.5, các core developer đã thay đổi hành vi của

$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
0 một chút. Lời gọi
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))
8 sẽ kéo dài ít nhất bằng số giây mà bạn truyền vào, thậm chí cả khi giấc ngủ bị phá bơi một signal. Tuy nhiên, việc này sẽ không đúng nếu bản thân signal raise lên exception.: Trong Python 3.5, các core developer đã thay đổi hành vi của
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
0 một chút. Lời gọi
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))
8 sẽ kéo dài ít nhất bằng số giây mà bạn truyền vào, thậm chí cả khi giấc ngủ bị phá bơi một signal. Tuy nhiên, việc này sẽ không đúng nếu bản thân signal raise lên exception.
: Trong Python 3.5, các core developer đã thay đổi hành vi của
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
0 một chút. Lời gọi
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))
8 sẽ kéo dài ít nhất bằng số giây mà bạn truyền vào, thậm chí cả khi giấc ngủ bị phá bơi một signal. Tuy nhiên, việc này sẽ không đúng nếu bản thân signal raise lên exception.

Bạn có thể kiểm tra xem các giấc ngủ kéo dài bao lâu bằng cách sử dụng module

$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
3:
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop

Ở đây, bạn chạy module

$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
3 với tham số
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
5 - số lần mà câu lệnh sẽ được chạy. Bạn có thể thấy rằng là
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
3 chạy câu lệnh 3 lần và thời gian chạy tốt nhất là 3 giây, đúng là điều chúng ta mong đợi.

Số lần chạy code mặc định của

$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
3 là 1,000,000. Nếu bạn chạy đoạn code trên với
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
5 mặc định, terminal sẽ treo xấp xỉ 34 ngày! Module
$ python3 -m timeit -n 3 "import time; time.sleep(3)"
3 loops, best of 3: 3 sec per loop
3 còn có các lựa chọn khác khi chạy lệnh, bạn có tham khảo thêm ở đây.

Hãy thử tạo ra một cái gì đó thực tế hơn! Một quản trị hệ thống cần biết khi nào một trong các website của họ "chết". Bạn muốn có thể check trạng thái hệ thống một cách thường xuyên nhưng bạn không thể truy vấn web server liên tục hoặc việc đó có thể ảnh hưởng tới hiệu năng. Một cách để làm việc này là sử dụng

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))
8:

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))
2

Ở đây bạn định nghĩa hàm

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))
21 có nhận một URL là tham số đầu vào. Hàm này sau đó sẽ thử mở URL đó với
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))
22. Nếu có lỗi
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))
23 hay
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))
24, chương trình bắt và in ra lỗi. (Trong thực tế, bạn có thể sẽ log lại lỗi và gửi email tới chủ hoặc quản trị viên của website đó.)

Nếu không có lỗi xảy ra, chương trình sẽ thông báo là mọi thứ đều ổn. Cho dù điều gì có xảy ra, chương trình của bạn cũng sẽ ngủ trong khoảng 60 giây. Điều này có nghĩa là bạn chỉ truy cập vào website một phút một lần. Đường link trong ví dụ bị chết vậy nên chương trình sẽ in ra dòng sau trong console mỗi phút một lần:

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))
7

Hãy update code với một URL còn sống kiểu như https://google.com. Sau đó chạy lại chương trình và thấy mọi thứ ổn hơn. Bạn có thể thử update code để gửi email hoặc log các lỗi. Chi tiết hơn về các vấn đề này, bạn có thể tìm hiểu Sending Emails With Python và Logging in Python.

Nguồn: https://realpython.com/python-sleep/

All rights reserved