2013-03-30 8 views
20

मैं अपने CPU उपयोग को गतिशील रूप से प्रदर्शित करना चाहता हूं। मैं एक नया मूल्य देखने के लिए पेज को फिर से लोड नहीं करना चाहता हूं। मुझे पता है कि पाइथन में सीपीयू उपयोग कैसे प्राप्त करें। अभी मैं मूल्य के साथ एक टेम्पलेट प्रस्तुत करता हूं। मैं फ्लास्क से मूल्य के साथ लगातार एक पृष्ठ कैसे अपडेट कर सकता हूं?फ्लास्क से समय-समय पर मूल्य अपडेट करें और

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

पृष्ठ को पुनः लोड नहीं करना मतलब है कि आपको क्लाइंट से कोड निष्पादित करना है, जिसका अर्थ है कि आपके पास ** जावास्क्रिप्ट का उपयोग करने के लिए ** है। साथ ही, जब आप सीपीयू उपयोग कहते हैं तो क्या आपका मतलब है कि आपका सर्वर? –

+1

यूप, आपको CPU उपयोग पर अद्यतन प्राप्त करने के लिए सर्वर से एक क्वेरी बनाने के लिए जावास्क्रिप्ट का उपयोग करना होगा। पूरी तरह से सर्वर की तरफ से ऐसा करना संभव नहीं है। – aychedee

+4

यदि आपने वेबस्केट कनेक्शन स्थापित किया है, तो सर्वर क्लाइंट को अद्यतन धक्का दे सकता है। लेकिन आप अभी भी कनेक्शन बनाने और सर्वर से अद्यतनों के साथ सौदा करने के लिए जेएस का उपयोग करेंगे। – aychedee

उत्तर

21

एक 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 

कुप्पी के WebSockets का उपयोग करना मेरे जीवन बहुत आसान बना दिया। यहाँ लांचर है: launchwithsockets.sh

#!/bin/sh 

gunicorn -k flask_sockets.worker app:app 

अंत में, यहाँ ग्राहक कोड है:
custom.js
The code is a bit too long, so here it is.
ध्यान दें कि मैं चीजों को socket.io पसंद नहीं उपयोग कर रहा हूँ, यही कारण है कि कोड लंबा है। यह कोड समय-समय पर सर्वर से फिर से कनेक्ट करने का प्रयास करता है, और उपयोगकर्ता कार्रवाई पर पुनः कनेक्ट करने का प्रयास करना बंद कर सकता है। मैं उपयोगकर्ता को सूचित करने के लिए मैसेंजर lib का उपयोग करता हूं कि कुछ गलत हो गया है। बेशक यह socket.io का उपयोग करने से थोड़ा अधिक जटिल है, लेकिन मुझे वास्तव में क्लाइंट पक्ष को कोडिंग का मज़ा आया।

+0

AJAX कोड मुझे त्रुटि देता है असीमित संदर्भ त्रुटि: $ SCRIPT_ROOT परिभाषित नहीं किया गया है – Marshall

+0

यहां दस्तावेज़ों पर एक नज़र डालें: http://flask.pocoo.org/docs/0.10/patterns/jquery/#where-is-my -साइट – Depado

+0

@ डेपैडो: अपडेट_वैल्यूज() कहां और कहां से कहां करें? –

संबंधित मुद्दे