Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何每隔N分钟在mqtt paho中存储和解析实时流数据(python)_Python_Time_Mqtt_Paho - Fatal编程技术网

如何每隔N分钟在mqtt paho中存储和解析实时流数据(python)

如何每隔N分钟在mqtt paho中存储和解析实时流数据(python),python,time,mqtt,paho,Python,Time,Mqtt,Paho,我在做一个实时数据流项目,每N分钟解析和存储一次数据。我的目标是扔掉第一分钟的数据(作为缓冲区),每4分钟存储一次来自服务器的数据。然后,数据将被解析为要进行集群和计算的其他函数(此处不包括函数) 我已经在消息”函数上的“处初始化了条件,并在该函数中对其进行了数据解析。我不认为我的组织和召唤是实现我目标的正确途径。如果您需要任何其他详细信息,请告诉我 论信息 存储功能 主要的 首先,您不应在on_message函数中阻塞(睡眠),该函数将为收到的每条消息调用,如果您睡眠,则系统将必须等待该时间长

我在做一个实时数据流项目,每N分钟解析和存储一次数据。我的目标是扔掉第一分钟的数据(作为缓冲区),每4分钟存储一次来自服务器的数据。然后,数据将被解析为要进行集群和计算的其他函数(此处不包括函数)

我已经在消息”函数上的“处初始化了条件,并在该函数中对其进行了数据解析。我不认为我的组织和召唤是实现我目标的正确途径。如果您需要任何其他详细信息,请告诉我

论信息 存储功能 主要的
首先,您不应在
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)