【问题标题】:Update On Load using Dash Plotly使用 Dash Plotly 更新加载
【发布时间】:2021-02-01 02:12:40
【问题描述】:

这是我最近部署的一个简单的网络应用:https://covid19-visualisation-seb.herokuapp.com/

我使用了 Dash 框架并使用 Heroku 进行了部署。

我使用 df = pd.read_csv('owid-covid-data.csv') 加载数据集。最新的数据集可以在这里找到:

https://covid.ourworldindata.org/data/owid-covid-data.csv

数据每天都在更新。问题是,如果我只将df 变量设置为链接,那么它只会在服务器启动时从源获取数据一次。所以如果我想每天更新数据,我就必须每天重启服务器,这是无稽之谈。

Dash 文档提供了页面加载更新功能,如下所示:

import datetime

import dash
import dash_html_components as html

def serve_layout():
    return html.H1('The time is: ' + str(datetime.datetime.now()))

app.layout = serve_layout

if __name__ == '__main__':
    app.run_server(debug=True)

当我刷新页面时它会起作用(时间会自行更新)

但我想在页面加载时重新分配一个变量,但不确定如何执行此操作我收到错误消息。我试过这样的事情:

import dash
import pandas as pd

app = dash.Dash()

df = ''

def get_data():
    global df
    df = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv')


app.layout = get_data

if __name__ == '__main__':
    app.run_server(debug=True)

有什么帮助吗?

【问题讨论】:

  • app.layout 必须分配给 Dash UI 组件,并且在第二个 sn-p get_data 的情况下不会返回后者。在将 CSV 数据读取到 df 后,我希望您希望将其传递到 Dash UI 组件中,而您应该返回该组件。
  • 我做了更多的研究,我发现文件是 16mb,而且每次用户与 dash 组件交互时都无法下载。所以理想情况下,我希望我的应用每 24 小时下载一次文件。我尝试使用请求下载它,然后使用 schedule 运行重复的功能,但它的代码最终在无限循环中运行,导致 res 无法访问。如何在不干扰服务器的情况下每 24 小时运行一次函数?

标签: python pandas plotly plotly-dash


【解决方案1】:

Plotly dash 有一个名为dash_core_components.Interval 的功能,它将定义触发应用程序回调的时间间隔。显然,您必须设置回调功能才能使用它。检查下面的文档,它非常彻底。您还将在应用程序底部看到,他们建议实施时间过期缓存来处理长期应用程序的内存瓶颈。

https://dash.plotly.com/live-updates

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2019-04-29
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    相关资源
    最近更新 更多