如何在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
相关产品推荐
相关产品推荐

