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

标签 python mysql data-visualization plotly

祝您一切顺利,感谢您的阅读。

一直在重新审视一个旧项目,利用plotly将数据从mysql中流出来,并在两者之间使用python。我从来没有在plot.ly上有过好运气(我确信这更多地与我的理解有关,而不是他们的平台),流/iframes似乎随着时间的推移而停滞不前,我不太容易完全排除故障。

我当前的症状是这样的:绘图任意停止 - 我正在推送数据,但 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() 一次,如下所示:

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 不刷新有关?我的一部分认为这种症状与我的想法无关 - 数据变得很好 - 这是我的 session 即将过期,或者 iframe“连接”即将过时。如果症状无关,至少我会让我的源代码更干净、更合适。

非常感谢任何建议!

谢谢 -贾斯汀

最佳答案

Plotly 将关闭超过 60 秒不活动的流。您必须向流媒体 channel 发送换行符(心跳)以使其保持打开状态。我建议每 30 秒一次。

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

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

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

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

希望有帮助!

关于Python - Plot.ly - MySQL 实时流可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35446675/

相关文章:

开始新月份时的 Python 日期问题

python - 无法在 Linux 上 pip 安装 psycopg2

FreeBSD jail 上的 PHP、Apache 和 MySQL

javascript - d3 — 逐步绘制大型数据集

python - tqdm 可以与数据库读取一起使用吗?

python - 如何在tensorflow中实现DBSCAN聚类?

MySQL 查询 ORDER BY DateTime 问题

mysql - MYSQL中必须运行 "ROLLBACK"吗?

python - 使用 matplotlib 在给定域上绘制 3 维函数

.net - 可视化 RDF 查询结果