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

Python-Plot.ly-MySQL实时流媒体可视化,python,mysql,data-visualization,plotly,Python,Mysql,Data Visualization,Plotly,希望你很好,谢谢你的阅读 我一直在重温一个老项目,利用plotly将数据从mysql中流出来,而python介于两者之间。我从来没有在w/plot.ly(我确信这与我的理解有关,而不是与他们的平台有关)上获得过好运气,streams/iFrame似乎会随着时间的推移而停滞,我不太容易完全排除故障 我当前的症状是:打印暂停-我正在推送数据,但iframe没有更新。 当前的解决方案是:每X分钟刷新一次浏览器。 这个解决方案是可行的,但它是聚合的,因为我不明白为什么视觉首先会停滞(是我,是他们,等等)

希望你很好,谢谢你的阅读

我一直在重温一个老项目,利用plotly将数据从mysql中流出来,而python介于两者之间。我从来没有在w/plot.ly(我确信这与我的理解有关,而不是与他们的平台有关)上获得过好运气,streams/iFrame似乎会随着时间的推移而停滞,我不太容易完全排除故障

我当前的症状是:打印暂停-我正在推送数据,但iframe没有更新。

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

这个解决方案是可行的,但它是聚合的,因为我不明白为什么视觉首先会停滞(是我,是他们,等等)

当我查看一些文档时,特别是此链接:

我注意到,它们不会不断地打开和关闭流,而且应该不时地放置心跳,以保持事物的活力/新鲜

以下是我目前每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)
根据我正在阅读的内容,听起来我应该在启动时执行一次脚本,并保持流打开,但heartbeat()在实际的write()调用之间每隔15秒左右执行一次,如下所示:

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的混乱,我只是想表达一个想法。有人有什么建议吗?我根据流媒体示例开始了我最初的打开、编写和关闭的过程,但这是一次编写。另一个例子是恒定的数据流。我介于两者之间

此外,这一思路是否与iframe相关而不令人耳目一新?我的一部分人认为症状与我的想法无关——数据正在绘制中。很好——是我的会话过期了,还是iframe“连接”过时了。如果症状是无关的,至少我会使我的源代码更干净、更合适

非常感谢您的建议

谢谢
-justin将Plotly关闭一个超过60秒的非活动流。您必须在流媒体频道(心跳)下发送一条新线以保持其打开。我建议每30秒一次

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

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

这就是为什么发送心跳信号很重要。我们保持源流的开放性,从而确保所有连接的客户端保持WebSocket的开放性

对于流媒体平台来说,这不一定是最健壮的行为,我们可能会在未来使它变得更好。但是现在,如果您尝试在第二个示例中实现代码,您可能会看到更好的结果

希望有帮助