You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask定时更新API调用:避免页面刷新触发的实现方法

解决方案

核心思路是把API调用的结果缓存起来,定时任务负责定期更新这个缓存,页面请求时直接读取缓存内容,不再触发新的API调用。

修改后的代码如下:

from flask_apscheduler import APScheduler
from flask import Flask, render_template

# 全局变量存储API调用结果,初始化默认值
api_result = "初始数据"

def update_api_data():
    """定时更新API数据,直接修改全局变量"""
    global api_result
    # 这里替换成实际的API调用逻辑
    api_result = "API调用返回的最新数据"

sched = APScheduler()
app = Flask(__name__)

@app.route("/home")
def home():
    # 直接使用缓存的结果,不再调用API
    return render_template('main_page.html', title='Register', api_data=api_result)

if __name__ == "__main__":
    # 设置24小时执行一次定时任务
    sched.add_job(
        id="daily_api_refresh",
        func=update_api_data,
        trigger='interval',
        hours=24
    )
    # 启动时先执行一次,避免初始数据为空
    update_api_data()
    sched.start()
    app.run()

关键改动说明

  • 新增全局变量api_result:专门用来存储API的最新结果,所有请求都从这里取数据。
  • 重写定时任务函数update_api_data:不再返回结果,而是直接更新全局变量里的缓存内容。
  • 路由home不再调用API:直接把缓存的api_result传给模板,页面刷新时不会触发新的API请求。
  • 启动时手动执行一次update_api_data:确保应用刚启动就有最新的API数据,而不是等24小时才第一次更新。

注意事项

如果你的Flask应用是多进程部署(比如用Gunicorn开多个worker),全局变量会因为进程隔离导致每个进程有自己的缓存副本,这时候建议用Redis、Memcached这类独立缓存工具来存储API结果,保证所有进程读取的是同一份数据。

内容的提问来源于stack exchange,提问作者Yazid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:12:10