Я написал сценарий для чтения с инструмента и записи данных в CSV-файл. Интервал времени между каждой выборкой может быть задан пользователем. Частота выборки в секунду является довольно распространенной. Я использовал time.sleep и попытался извлечь время обработки для скрипта, используя timeElapsed = timeEnd - timeBegin. Проблема в том, что это недостаточно. Время дрейфует, поэтому время от времени скрипт перескакивает через секунду. На моем компьютере это происходит примерно каждые 2-3 минуты. Поэтому мой вопрос заключается в том, как я могу повысить точность времени.Запуск в цикле каждую секунду
import csv
import datetime
import time
import os.path
no_of_meas = 200
cur_meas = 1
time_interval= 1 #time between each sample given in seconds, 1 second is the lowest recommended value
with open('test.csv', 'a', newline='') as fp:
while cur_meas <= no_of_meas:
timeBegin = time.time()
cur_time = datetime.datetime.strftime(datetime.datetime.now(), '%H:%M:%S.%f')
a = csv.writer(fp, delimiter='\t')
data = [[cur_time, cur_meas]]
a.writerows(data)
fp.flush() #flush and os.fsync to be sure that data is written to disk
os.fsync(fp.fileno())
print(', '.join(map(str, data)))
cur_meas += 1
timeEnd = time.time()
timeElapsed = timeEnd - timeBegin
time.sleep(time_inter-timeElapsed)
Вместо того чтобы спать, проверьте, больше или равно текущее время; таким образом, ошибка не может накапливаться. –
Я думаю, что это то, что вы хотите: http://stackoverflow.com/a/13151104/3881403 –