簡體   English   中英

Heroku/Dash 應用程序 Python,讀取 Google Cloud Storage 上的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM