Я работаю над быстрым регистратором данных на основе Raspberry Pi. Идея состоит в том, чтобы использовать Pi для взаимодействия с акселерометром lis3dh через SPI как можно быстрее и отправлять данные в infxdb как временные ряды. Я не уверен, что это безумие, но я планировал использовать sh ограничение в 5 кГц в качестве частоты выборки.
Моя первая реализация - получить данные для точного притока с использованием Python, но я ' Я бы хотел улучшить все.
Вот часть моего кода, который отправляет данные в том виде, в каком они записаны:
# Loop above that is keeping track of run time and other user control ^
# Setup the variables
lastSampleTime = time.time()
measurement = "accel"
location = "location1"
# May need to include additional location in future
# Run the periodic sampling
while (time.time() - lastSampleTime) < SampleTime:
# Get Values from the device in a list[x, y, z]
AccelData = GetReadingsNow(lis3dh)
# Obtain current time
timenow = time.time_ns()
# construct the data to be sent
data = [{
"measurement": measurement,
"tags": {
"location": location,
},
"time": timenow,
"fields": {
"x": Accels[0],
"y": Accels[1],
"z": Accels[2]
}
}]
# Send the JSON data to InfluxDB
client.write_points(data)
Согласно документации по притоку, для ускорения записи нужно использовать пакетную написать в db. Но вот мой вопрос.
- Могу ли я использовать два потока, где один поток отвечает за выборку, а другой - для отправки данных в поток?
- Если да, то как поток 2 узнает что уже было отправлено из этого списка изменений?
- Если бы я не мог выполнять многопоточную обработку, то каким было бы решение минимизировать потери данных как при выборке, так и при записи в поток?
Спасибо за вашу помощь.