【发布时间】: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-pget_data的情况下不会返回后者。在将 CSV 数据读取到df后,我希望您希望将其传递到 Dash UI 组件中,而您应该返回该组件。 -
我做了更多的研究,我发现文件是 16mb,而且每次用户与 dash 组件交互时都无法下载。所以理想情况下,我希望我的应用每 24 小时下载一次文件。我尝试使用请求下载它,然后使用 schedule 运行重复的功能,但它的代码最终在无限循环中运行,导致 res 无法访问。如何在不干扰服务器的情况下每 24 小时运行一次函数?
标签: python pandas plotly plotly-dash