我的烧瓶应用程序从外部 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)?
感谢任何建议,因为我对烧瓶很陌生。
马丁