Tôi đang chơi với chức năng time.sleep từ thư viện chuẩn của python và thấy nó không đủ cho sự chậm trễ của các ms. Từ thử nghiệm tôi tìm thấy nó để thực sự chờ đợi 1,1-1,2 ms cho một chờ đợi 1ms. Thực hiện một chờ đợi bận rộn có độ chính xác trong vòng 1%. Tôi đã sử dụng:Thời gian chờ của Python so với độ chính xác chờ đợi bận rộn
def busy_wait(dt):
current_time = time.time()
while (time.time() < current_time+dt):
pass
và có thể giảm xuống 0,0001 giây trước khi phá vỡ độ chính xác 1%.
Các câu hỏi chính tôi có là:
- Tại sao là chức năng ngủ nên không chính xác (có thể là một vấn đề C)? Sẽ nhận được một CPU tốt hơn với tốc độ đồng hồ cao hơn thay đổi điều này?
- Tại sao mọi người lại sử dụng chế độ ngủ? Lợi thế duy nhất tôi thấy, bảo tồn năng lượng, được giới hạn trong các hệ thống nhúng, phải không?
- Nó có khả thi để bù đắp cho sự thiếu chính xác của giấc ngủ với hiệu chuẩn không? Cũng giống như vậy:
def sleep(dt): sleep(calibration_function(dt))
Là một sang một bên, tôi đọc mà ngủ thậm chí không hoạt động tốt với thời gian chờ đợi lâu dài: Upper limit in Python time.sleep()? Tôi cũng đọc ở đâu đó trên SO thực hiện một vòng lặp của các khoảng thời gian ngắn hơn để tăng độ chính xác , nhưng đó là vô ích khi tôi muốn trì hoãn 0,01 giây. Karl Voigtland đề cập đến việc sử dụng nanosleep của ctypes, nhưng tôi cảm thấy điều này là quá mức cần thiết và time.sleep đó nên thực hiện hành vi dự định của nó.
time.sleep là một tính năng python bị hỏng? Hay không ai quan tâm đến việc đo thời gian chính xác đủ?
bản sao có thể có của [Làm thế nào chính xác là python's time.sleep()?] (Http://stackoverflow.com/questions/1133857/how-accurate-is-pythons-time-sleep) – g19fanatic
Yea Tôi figured it was an Hệ điều hành gọi, nhưng bây giờ tôi tự hỏi tại sao họ sử dụng một cuộc gọi hệ điều hành khi một chờ đợi bận rộn là tốt hơn. – JDong
một sự chờ đợi bận rộn làm giảm thời gian CPU và chặn một cpu. Một giấc ngủ sẽ chuyển đổi ngữ cảnh và không chặn thực hiện khác (nó thực hiện 'chặn' thực thi của bạn). Nói chung bạn chỉ bận chờ đợi nếu bạn thực sự cần thời gian chính xác, và thậm chí sau đó bạn vẫn còn giới hạn đối với các hệ điều hành cần cho CPU mà có thể bối cảnh bạn đi xa ... – g19fanatic