Sto leggendo i dati seriali con un ciclo while. Tuttavia, non ho alcun controllo sulla frequenza di campionamento.Come posso assicurarmi che un ciclo while di Python impieghi una quantità di tempo particolare per l'esecuzione?
Il codice stesso sembra richiedere 0,2 secondi per l'esecuzione, quindi so che non potrò andare più veloce di così. Ma mi piacerebbe essere in grado di controllare con precisione quanto più lento campionamento.
Mi sento come se potessi farlo usando "sleep", ma il problema è che c'è il potenziale che in punti diversi il ciclo stesso impiegherà più tempo a leggere (a seconda esattamente di ciò che viene trasmesso sui dati seriali), quindi il codice dovrebbe fare il bilancio.
Ad esempio, supponiamo di voler campionare ogni 1 s e il ciclo richiede da 0,2 a 0,3 secondi per l'esecuzione. Il mio codice deve essere abbastanza intelligente per dormire per 0,8 secondi (se il ciclo richiede 0,2 secondi) o 0,7 secondi (se il ciclo richiede 0,3 secondi).
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
Ho fatto questo genere di cose prima di usare/dev/rtc come trigger in un reattore asincrono. Si innesca a intervalli precisi indipendentemente dal tempo di misurazione. Ma potresti anche usare itimer. – Keith