Подтвердить что ты не робот

Периодически обновлять и отображать значение из колбы

Я хочу динамически отображать использование моего процессора. Я не хочу перезагружать страницу, чтобы увидеть новое значение. Я знаю, как получить использование ЦП в Python. Сейчас я создаю шаблон со значением. Как я могу постоянно обновлять страницу со значением из Flask?

@app.route('/show_cpu')
def show_cpu():
    cpu = getCpuLoad()
    return render_template('show_cpu.html', cpu=cpu)
4b9b3361

Ответ 1

Использование запроса 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+" %")
                });
        }

Использование веб-сайтов

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

#!/bin/sh

gunicorn -k flask_sockets.worker app:app

Наконец, вот клиентский код:
custom.js
Код слишком длинный, так что вот оно.
Обратите внимание, что я НЕ использую такие вещи, как socket.io, поэтому код длинный. Этот код также пытается периодически подключаться к серверу и может перестать пытаться повторно подключиться к действию пользователя. Я использую Messenger lib, чтобы уведомить пользователя о том, что что-то пошло не так. Конечно, это немного сложнее, чем использование socket.io, но мне очень понравилось кодирование на стороне клиента.