python - 如何不断更新 Flask 中视图函数中使用的变量?
问题描述
我有一个运行仪表板的 Flask 应用程序,仪表板的某些部分使用日期作为输入表单来过滤来自数据库的数据。但是,如果用户没有输入日期作为请求 arg,那么路由将返回一个模板,该模板以表gps_data中的最后一个可用日期呈现。
我有仪表板索引的下一条路线,可以按我的意愿工作:
import psycopg2 as pg2
@bp.route("/index", methods=["GET", "POST"])
def index():
date = request.args.get("date") # date form input
imei = request.args.get("imei") # imei form input
# if the user request 'index' without any date use last date from the table gps_data
if not date:
cur = conn.cursor() # psycopg2 cursor to postgresql database
query = """SELECT
max(timestamp_utc::date)
FROM
gps_data
WHERE imei = imei%s
"""
try:
# gps_data_last_date
cur.execute(query, imei)
date = cur.fetchall()[0][0]
except Exception as e:
conn.rollback()
date = None
print(e)
else:
conn.commit()
return redirect(url_for("dashboard.index", date=date))
return render_template(
"dashboard.html",
date=date
)
但问题是我不想在用户加载仪表板页面时获得最大日期,因为表 gps_data 非常大,加载页面时的性能可能会受到影响。所以我想使用一种后台任务来更新全局变量中的最大日期或类似的东西(例如每天一次),避免查询数据库表gps_data。
我已经研究过哪种方法是实现这一目标的最佳方法,似乎有两种选择:
- 添加Celery + Redis,并在 Flask 中设置一个 Celery 周期性任务,然后从 Redis 中读取视图函数中的日期。
- 像这个答案一样向 Flask 添加一个后台线程,并从全局变量中读取视图函数中的日期。
- 继续使用 SQL 表 gps_data 但在列
timestamp_utc
和imei
.
您知道是否有比这两个更好或更有效的选择?如果没有其他选择,您认为这两个选项中哪一个是最好的?
编辑:添加了第三个选项
解决方案
推荐阅读
- nginx - Kubernetes NodePort 服务随机出现网络不可达或挂起
- html - 有没有办法把这张登录卡移到中心
- qt - C++ QLineEdit 如何限制QLineEdit中输入的数字范围?
- excel - 使用同一行中不同列的结果
- python - 如何使用 apache-beam 读取数据帧
- javascript - 如何在 React.js 的 return 方法中编写 JS 代码
- go - Go 运行时错误:恐慌:运行时错误:无效的内存地址或 nil 指针取消引用
- python - 使用分类嵌入器包时出现问题
- python - 是否可以在端到端测试中使用 Selenium + Webdriver 模拟语音输入?
- git - 提交日历与 PC 时间不同步