Python - Plot.ly - MySQL实时流式可视化

时间:2016-02-17 02:11:31

标签: python mysql data-visualization plotly

希望你很好,感谢阅读。

一直在重新审视一个旧项目,利用两者之间的方式利用python将数据流出mysql。我从来没有好运过/ plot.ly(我确信这与我的理解比他们的平台更相关),溪流/ iframe似乎随着时间的推移而停滞不前,我不够完全排除故障。

我目前的症状是:情节随意停滞 - 我正在推送数据,但iframe没有更新。

目前的解决方案是:每隔X分钟刷新一次浏览器。

解决方案有效,但它是聚合的,因为我不明白为什么视觉效果首先停滞(是我,是它们等等)。

在我查看部分文档时,特别是此链接: https://plot.ly/streaming/

我注意到他们呼吁不要不断地打开和关闭流,并且应该经常放置心跳以保持活力/新鲜。

以下是我每10分钟拨打的电话:

pullData(mysql)
format data 

open(plotly.stream1)
write data to plotly.stream1
close(plotly.stream1) 

open(plotly.stream2)
write data to plotly.stream2
close(plotly.stream2)

基于我正在阅读的内容,听起来我应该在启动时实际执行一次脚本并保持流打开,但是实际的write()调用之间每隔15秒左右就会检测到heartbeat(),如下所示: / p>

open(plotly.stream1)
open(plotly.stream2)

every 10 minutes:
    pullData(mysql)
    format data

    write data to plotly.stream1
    write data to plotly.stream2

while not pulling and writing:
    every 15 seconds:
        heartbeat(plotly.stream1)
        heartbeat(plotly.stream2)

if error:
    close(plotly.stream1) 
    close(plotly.stream2) 

请原谅sudo-mess,我只想传达一个想法。有人有什么建议吗?我开始基于流媒体示例打开,写入,关闭的原始路径,但这是一次性写入。另一个例子是恒定的数据流。我介于这两者之间。

此外 - 这一思路甚至与iframe不相关还是令人耳目一新?我的一部分认为这个症状与我的想法无关 - 数据正在变得很好 - 这是我的会话即将到期,或iframe“连接”即将过时。如果症状不相关,至少我会使我的源代码更清洁,更合适。

非常感谢任何建议!

由于 -justin

1 个答案:

答案 0 :(得分:0)

Plotly将关闭一个非活动状态超过60秒的流。您必须在流媒体通道(心跳)下发送换行符以保持打开状态。我建议每30秒。

您的第一个代码示例可能无法按预期工作,因为当您的第一个源流(将脚本连接到我们的系统的流)退出时,客户端websocket(将Plot连接到我们的系统)可能会关闭。当您断开源流时,会向我们的系统发送一个信号,让您知道您的流现在处于非活动状态。如果新的源流没有快速重新连接,我们关闭连接websockets的客户端。

现在,当您的脚本获取更多数据并打开新流时,它将成功地将数据流传输到我们的系统,但是现在关闭的客户端websocket将不会将数据传递给Plot。我们将在幕后为您缓存一定数量的点,这样当您刷新页面时,websocket重新连接并获得最后n个点(其中n由API调用中的max-points设置)。

这就是发送心跳很重要的原因。我们保持源流打开,这反过来确保所有连接的客户端保持其websockets打开。

这不一定是流媒体平台最强大的行为,我们可能会在未来做得更好。目前,虽然通过尝试在第二个示例中实现代码,您可能会看到更好的结果。

希望有所帮助!