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

如何在Flask服务器中实现每5分钟执行的定时检查与字典刷新任务?

简单实现Flask定时状态检查与前端自动刷新

后台定时状态检查(基于threading)

用Python标准库的threading就能实现简单的定时任务,不需要额外依赖。核心思路是启动一个后台线程,循环执行状态检查并更新全局字典,用锁保证线程安全。

from flask import Flask, jsonify, render_template
import threading
import time
from threading import Lock

app = Flask(__name__)

# 存储状态的全局字典
status_dict = {}
# 线程锁,避免多线程同时修改字典导致数据异常
status_lock = Lock()

def status_check_task():
    """后台定时执行的状态检查任务"""
    while True:
        # 替换成你的实际状态检查逻辑
        new_status = {
            "last_check": time.strftime("%Y-%m-%d %H:%M:%S"),
            "service_status": "running",
            "resource_usage": "75%"
        }
        
        # 加锁更新字典
        with status_lock:
            global status_dict
            status_dict = new_status
        
        # 等待5分钟(300秒)
        time.sleep(300)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/api/get_status')
def get_status():
    # 加锁读取字典
    with status_lock:
        return jsonify(status_dict)

if __name__ == '__main__':
    # 启动后台定时线程,设置daemon=True让线程随Flask进程退出
    threading.Thread(target=status_check_task, daemon=True).start()
    app.run(debug=True)

前端自动刷新(HTML+JS)

在项目的templates目录下创建index.html,用JavaScript的setInterval定时请求后端接口,局部更新页面内容:

<!DOCTYPE html>
<html>
<head>
    <title>状态监控</title>
    <script>
        // 页面加载完成后立即获取一次状态,之后每5分钟刷新
        window.onload = function() {
            updateStatus();
            // 5分钟=300000毫秒
            setInterval(updateStatus, 300000);
        }

        function updateStatus() {
            fetch('/api/get_status')
                .then(response => response.json())
                .then(data => {
                    // 将字典数据渲染到页面,可根据需求美化样式
                    let statusHtml = '';
                    for (let key in data) {
                        statusHtml += `<p><strong>${key}:</strong> ${data[key]}</p>`;
                    }
                    document.getElementById('status-container').innerHTML = statusHtml;
                })
                .catch(error => {
                    document.getElementById('status-container').innerHTML = '<p>获取状态失败</p>';
                });
        }
    </script>
</head>
<body>
    <h1>系统状态监控</h1>
    <div id="status-container">
        <p>正在加载状态...</p>
    </div>
</body>
</html>

关键说明

  • 线程安全:用Lock包裹字典的读写操作,避免Flask请求线程和后台检查线程同时操作字典引发数据异常。
  • 后台线程:设置daemon=True,确保Flask服务器关闭时,后台线程会自动终止,不会残留进程。
  • 前端刷新:用setInterval定时调用接口,相比整页刷新,这种局部更新的方式更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:33:46