【问题标题】:How to update a plotly dash app with new data from a database如何使用数据库中的新数据更新 plotly dash 应用程序
【发布时间】:2019-11-04 09:01:32
【问题描述】:

我有一个 Flask 应用程序 (Plotly Dash),它从每天更新的数据库中获取数据。部署在 AWS 上,我使用 gunicorn/nginx 运行该应用程序。问题是,应用程序中使用的数据来自最新的 gunicorn 运行,而不是数据库中的最新数据。

我认为的一个解决方案是使用计时器向 gunicorn 命令(例如 --reload)添加一个属性,以每天自动重启 gunicorn。这可能吗,甚至还有其他解决方法吗?

解决方案https://community.plot.ly/t/how-to-refresh-data-on-fly/13069

【问题讨论】:

  • 正在修改应用程序以在一段时间后自行重启或重启,例如触发器(例如 /service/restart 上的传入 HTTP 请求)是否可能?
  • 在页面刷新时重新运行脚本基本上是理想的。
  • 可以把flask路由中的脚本打包吗?数据处理需要多长时间,它只是从数据库中提取一些东西还是涉及一些“更长”的处理?你能展示一些烧瓶路线和数据库连接的代码吗?
  • 该过程是, - 使用 psycopg2 打开与数据库的连接, - 创建游标, - 使用游标运行 4 个单独的查询。来自查询的数据存储在本地 pandas DataFrames 中,根据特定需求进行聚合,然后进行可视化。整个过程最多可能需要 2 分钟。没有 Flask 路由,我初始化了一个托管 Plotly Dash 应用程序的 Flask(name) 服务器
  • 您能否发布您的解决方案作为您自己问题的答案(并接受它)?这样就可以看出这个问题有一个解决方案,希望可以帮助其他人。

标签: python flask psycopg2 plotly-dash


【解决方案1】:

您可以使用 the SIGHUP signal 向 gunicorn 发送信号以重新加载。要手动尝试,您可以这样做,例如使用killall -s 1 gunicorn,要每天重新加载,您可能想要使用cron 之类的东西或某些AWS 特定服务。这似乎是 AWS has some documentation

使用killall 是次优的,因为它对进程的名称进行操作。如果名称更改(例如 gunicorn 将自身重命名以使用应用程序名称标识)或运行多个 gunicorn,它可能会中断。但只要这是服务器的唯一用例,应该没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多