Tôi đang đọc dữ liệu nối tiếp với vòng lặp while. Tuy nhiên, tôi không kiểm soát được tốc độ lấy mẫu.Làm cách nào để đảm bảo rằng một vòng lặp trong Python mất một lượng thời gian cụ thể để chạy?
Bản thân mã có vẻ mất 0,2 giây để chạy, vì vậy tôi biết tôi sẽ không thể phát triển nhanh hơn thế. Nhưng tôi muốn có thể kiểm soát chính xác tôi lấy mẫu bao nhiêu.
Tôi cảm thấy mình có thể làm điều đó bằng cách sử dụng 'ngủ', nhưng vấn đề ở đây là có khả năng ở các điểm khác nhau, bản thân vòng lặp sẽ mất nhiều thời gian hơn (tùy thuộc vào chính xác những gì đang được truyền qua dữ liệu nối tiếp) mã sẽ phải bù đắp số dư.
Ví dụ: giả sử tôi muốn lấy mẫu mỗi 1 giây và vòng lặp mất từ 0,2 giây đến 0,3 giây để chạy. Mã của tôi cần phải đủ thông minh để ngủ cho 0.8s (nếu vòng lặp mất 0.2s) hoặc 0.7s (nếu vòng lặp mất 0.3s).
import serial
import csv
import time
#open serial stream
while True:
#read and print a line
sample_value=ser.readline()
sample_time=time.time()-zero
sample_line=str(sample_time)+','+str(sample_value)
outfile.write(sample_line)
print 'time: ',sample_time,', value: ',sample_value
Tôi đã thực hiện loại điều này trước khi sử dụng/dev/rtc làm trình kích hoạt trong lò phản ứng không đồng bộ. Nó kích hoạt tại các khoảng thời gian chính xác độc lập với thời gian đo. Nhưng bạn cũng có thể sử dụng itimer. – Keith