如何每隔N分钟在mqtt paho中存储和解析实时流数据(python)
我在做一个实时数据流项目,每N分钟解析和存储一次数据。我的目标是扔掉第一分钟的数据(作为缓冲区),每4分钟存储一次来自服务器的数据。然后,数据将被解析为要进行集群和计算的其他函数(此处不包括函数) 我已经在消息”函数上的“处初始化了条件,并在该函数中对其进行了数据解析。我不认为我的组织和召唤是实现我目标的正确途径。如果您需要任何其他详细信息,请告诉我 论信息 存储功能 主要的如何每隔N分钟在mqtt paho中存储和解析实时流数据(python),python,time,mqtt,paho,Python,Time,Mqtt,Paho,我在做一个实时数据流项目,每N分钟解析和存储一次数据。我的目标是扔掉第一分钟的数据(作为缓冲区),每4分钟存储一次来自服务器的数据。然后,数据将被解析为要进行集群和计算的其他函数(此处不包括函数) 我已经在消息”函数上的“处初始化了条件,并在该函数中对其进行了数据解析。我不认为我的组织和召唤是实现我目标的正确途径。如果您需要任何其他详细信息,请告诉我 论信息 存储功能 主要的 首先,您不应在on_message函数中阻塞(睡眠),该函数将为收到的每条消息调用,如果您睡眠,则系统将必须等待该时间长
首先,您不应在
on_message
函数中阻塞(睡眠),该函数将为收到的每条消息调用,如果您睡眠,则系统将必须等待该时间长度,然后才能继续下一条消息
接下来,您需要跟踪on_message
功能之外的开始时间,然后您可以将每个消息的当前时间与该值进行比较,并决定是否要保留/处理它
def on_message(r_c_client, userdata, message):
global process_startTime
if (message.topic == "scanning"):
c = datetime.now().time()
current = (c.hour * 60 + c.minute) * 60 + c.second
if (current<=total_Time and current>=(process_startTime + 60)):
data = json.loads(message.payload.decode("utf-8"))
x = data['host']
y = data['data']
hostList = store(x, y)
我只能在4分钟后调用函数进行处理,您的条件将在数据超过4分钟之前调用我的函数。4分钟后,它将调用我的函数,每隔4分钟再次调用一次。你的问题不清楚,你发布的代码也不清楚。我已经编辑了答案,它不是100%正确,但它应该在正确的方向上给你足够的分数。秒编辑并没有真正起作用,而while循环并没有真正正常运行。我已经让我的代码在第一次编辑时工作,但唯一关心的是代码保持运行,并且没有在每4分钟的时间范围内停止。我会设法找出正确的逻辑来解决这个问题
def store(host, data):
if host in hostList:
hostList[host].append(data)
else:
hostList[host] = [data]
return hostList
global process_startTime
t = datetime.now().time()
process_startTime = (t.hour * 60 + t.minute) * 60 + t.second
total_Time = process_startTime + 300 #4 minutes + 1 minute
print t , process_startTime
broker_address = '10.10.0.100'
c_client = mqtt.Client("trilateration")
c_client.on_connect = on_connect
c_client.on_message = on_message
c_client.on_subscribe = on_subscribe
c_client.connect(broker_address, 1883)
c_client.loop_forever()
def on_message(r_c_client, userdata, message):
global process_startTime
if (message.topic == "scanning"):
c = datetime.now().time()
current = (c.hour * 60 + c.minute) * 60 + c.second
if (current<=total_Time and current>=(process_startTime + 60)):
data = json.loads(message.payload.decode("utf-8"))
x = data['host']
y = data['data']
hostList = store(x, y)
global process_startTime
t = datetime.now().time()
process_startTime = (t.hour * 60 + t.minute) * 60 + t.second
total_Time = process_startTime + 300 #4 minutes + 1 minute
print t , process_startTime
broker_address = '10.10.0.100'
c_client = mqtt.Client("trilateration")
c_client.on_connect = on_connect
c_client.on_message = on_message
c_client.on_subscribe = on_subscribe
c_client.connect(broker_address, 1883)
while (True):
c_client.loop()
c = datetime.now().time()
current = (c.hour * 60 + c.minute) * 60 + c.second
if (current >= total_Time):
nodeList = listToDf(hostList)
nodeDf= df_reformat(nodeList)
print clustering_results_reformat(process_startTime, nodeDf)
time.sleep(1)