Czytam dane szeregowe z pętlą while. Nie mam jednak kontroli nad częstotliwością próbkowania.Jak mogę się upewnić, że pętla while w Pythonie zajmuje określony czas?
Sam kod wydaje się zajmować 0,2 s, więc wiem, że nie będę mógł jechać szybciej. Ale chciałbym móc kontrolować dokładnie, o ile wolniej próbuję.
Czuję, że mógłbym to zrobić za pomocą "uśpienia", ale problemem jest to, że w różnych punktach sama pętla będzie wymagać więcej czasu (w zależności od tego, co dokładnie transmitowane są dane szeregowe), więc kod musiałby uzupełnić saldo.
Na przykład, powiedzmy, że chcę próbkować co 1 s, a pętla trwa od 0,2 s do 0,3 s, aby uruchomić. Mój kod musi być wystarczająco inteligentny, aby spać przez 0,8 s (jeśli pętla trwa 0,2 s) lub 0,7 s (jeśli pętla trwa 0,3 s).
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
Zrobiłem tego rodzaju rzeczy przed użyciem/dev/rtc jako wyzwalacz w asynchronicznym reaktorze. Wyzwala w precyzyjnych odstępach czasu niezależnie od czasu pomiaru. Ale możesz też po prostu użyć itimeru. – Keith