我想动态显示我的CPU使用率。我不想重新加载页面以查看新值。我知道如何在Python中获得CPU使用率。现在,我使用该值渲染一个模板。如何使用Flask中的值连续更新页面?
@app.route('/show_cpu') def show_cpu(): cpu = getCpuLoad() return render_template('show_cpu.html', cpu=cpu)
使用Ajax请求
Python
@app.route('/_stuff', methods= ['GET']) def stuff(): cpu=round(getCpuLoad()) ram=round(getVmem()) disk=round(getDisk()) return jsonify(cpu=cpu, ram=ram, disk=disk)
Javascript
function update_values() { $SCRIPT_ROOT = {{ request.script_root|tojson|safe }}; $.getJSON($SCRIPT_ROOT+"/_stuff", function(data) { $("#cpuload").text(data.cpu+" %") $("#ram").text(data.ram+" %") $("#disk").text(data.disk+" %") }); }
使用Websockets
project/app/views/request/websockets.py
# -*- coding: utf-8 -*- # OS Imports import json # Local Imports from app import sockets from app.functions import get_cpu_load, get_disk_usage, get_vmem @sockets.route('/_socket_system') def socket_system(ws): """ Returns the system informations, JSON Format CPU, RAM, and Disk Usage """ while True: message = ws.receive() if message == "update": cpu = round(get_cpu_load()) ram = round(get_vmem()) disk = round(get_disk_usage()) ws.send(json.dumps(dict(received=message, cpu=cpu, ram=ram, disk=disk))) else: ws.send(json.dumps(dict(received=message)))
project/app/__init__.py
# -*- coding: utf-8 -*- from flask import Flask from flask_sockets import Sockets app = Flask(__name__) sockets = Sockets(app) app.config.from_object('config') from app import views
使用Flask-Websockets使我的生活更加轻松。这是启动器: launchwithsockets.sh
launchwithsockets.sh
#!/bin/sh gunicorn -k flask_sockets.worker app:app
请注意,我没有使用socket.io之类的东西,这就是代码很长的原因。此代码还尝试定期重新连接到服务器,并且可以停止尝试通过用户操作重新连接。我使用Messenger库来通知用户出现问题。当然,这比使用socket.io要复杂一些,但是我非常喜欢对客户端进行编码。