2

我的烧瓶应用程序从外部 API 提取用户数据并进行少量处理并生成数据框。虽然不是很重,但在将数据加载到页面上时会有明显的延迟。应用程序上的多个页面使用相同的数据来显示数据的不同方面。为了加快速度,我考虑暂时保存数据(10 分钟左右)并重用它,而不是在每个页面加载时抓取数据。

收集数据的简化函数是:

def get_dataset_from_wahoo(per_page=300, page=1):
    connection = Connection.query.filter_by(user_id = current_user.id, provider = 'wahoo')
    if connection.count() == 0:  #does not exist - return to index and point to auth page
        return render_template('home/index_noauth.html', title='Authentication Error')

    #return a valid token object from the database
    token = connection.first().token
    expires = token['created_at'] + token['expires_in']
    now = int(datetime.now().strftime("%s"))
    if now > expires:   #token has expired, get a new one
        token = refresh_token(token)
        connection.one().token = token
        db.session.commit()

    #request the data using the valid token
    header = {'Authorization': 'Bearer ' + token['access_token']}
    param = {'per_page': per_page, 'page': page}
    dataset = requests.get(api_url + '/workouts', headers=header, params=param).json()

    #create a dataframe from the returned dataset
    df = pd.json_normalize(dataset['workouts'])
    for col in df:
        df[col]=pd.to_numeric(df[col], errors='ignore')
    for col in df.select_dtypes(include=['object']):
        df[col]=pd.to_datetime(df[col], errors='ignore')
    return df

我可以使用 Flask-Caching memoize 缓存这个结果,这似乎加快了速度。我不清楚如何清除文件系统缓存?我只需要在服务器上运行清理任务吗?或者更好的方法是将数据帧存储在 Flask 会话中(从我的初始测试来看,它的最大大小约为 200kB)?

感谢任何建议,因为我对烧瓶很陌生。

马丁

4

0 回答 0