我正在使用树莓皮和XDB进行物联网工作
我想收集数据并写入XDB。我的pi是4B,XDB版本是1.8。使用python脚本。 通过Chronograf,我发现我写入的数据中存在断点
我使用生产者和消费者方法的多重处理
生产者收集数据,以JS格式编写,并将其放入队列
消费者制作列表并附加队列的数据。当列表长度为10000时发送到XDB
我已经使用logging.info进行了检查,发现生产者将暂停一段时间,因此会有断点。但我不知道为什么会发生这种情况
以下是相关代码:
def producer(q):
while True:
timeNow=datetime.utcnow()
adc = spi.transfer(device_0, data_out)
val = (adc[1]*256 + adc[2]-412)/512 #read data
js = {
"measurement": "mydb",
"time": timeNow,
"tags": {
},
"fields": {
"sensor": val
}
}
q.put(js) #put in queue
def consumer(q):
body=[]
i=0
while True:
while i<10000:
body.append(q.get()) #get js from queue
i+=1
i=0
res = client.write_points(body) #send data
body.clear()
if __name__ == "__main__":
q=Queue(maxsize = 10000000) #set queue length
device_0 = spi.openSPI(device="/dev/spidev0.0",
mode=0,
speed=1000000) #set spi sampling rate 1000000
data_out = (1,128,0)
adc=(0,0,0)
client = InfluxDBClient(host='localhost', port=8086, username='admin', password='admin', database= 'mydb',ssl=False, verify_ssl=False) #set influxDB
p1 = Process(target=producer,args=(q,))
c1 = Process(target=consumer,args=(q,))
p1.start()
c1.start()
数据量约为每秒10k。我知道我的程序是初步的。我对编码还不熟悉
我的程序如何改进?如何解决断点问题
如果您能给我提些有用的建议,我将不胜感激
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐