[英]Heroku/Dash app Python, reading file on Google Cloud Storage
我在 Heroku 上部署了一個破折號 web 應用程序,它需要讀取位於 Google Cloud Storage 上的 .csv 文件。 為此,我向應用提供了訪問我的 Google Cloud 帳戶的憑據,然后我可以使用 pandas 加載文件:
import pandas as pd
df = pd.read_csv("gs://bucket_name/file_name.csv")
This.csv 文件會定期更新,但應用程序不會考慮更新。
應用程序在部署時加載文件,但之后,它永遠不會重新加載文件,因此,在我再次部署它之前,它永遠不會考慮更新。
有沒有辦法在我每次刷新 web 瀏覽器時強制應用程序讀取文件,以便考慮每次更新?
提前謝謝你 最好的問候
我認為裝飾器在這里很有用。 請務必考慮到,根據文件的大小,您可能會遇到一些額外的延遲,因為它每次都需要重新加載df
。
您需要裝飾每個需要重新加載df
的視圖。
另一種方法是設置一個強制重新加載df
的特定端點,並使用 Heroku 的調度程序調用該端點。 這將消除其他請求的額外延遲,但有時會使其顯示陳舊數據。
請參閱下面的簡短示例...
import Flask
from functools import wraps
import pandas as pd
app = Flask(__name__)
df = pd.read_csv("gs://bucket_name/file_name.csv")
def reload_df(f):
@wraps(f)
def decorated_function(*args, **kwargs):
global df
df = pd.read_csv("gs://bucket_name/file_name.csv")
return f(*args, **kwargs)
return decorated_function
@app.route("/")
@reload_df
def index():
return "hello world"
@app.route("/not_reloading_df")
def index():
return "still using previous DF"
@app.route("/forcereload")
@reload_df
def force_reload():
return "Reloaded DF"
if __name__ == "__main__":
app.run(debug=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.