Flask实战:实现简单的计算机资源监控系统,动态数据展示

前言

简介

        采用Flask、Flask_socketio,实现对计算机资源实时监控刷新。

Domain info

         Flask、Flask_socketio、psutil、threading

  • psutil获取系统cpu使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu,interval指定的是计算cpu使用率的时间间隔,percpu则指定是选择总的使用率还是每个cpu的使用率。

    如果percpu赋值为True的话就会返回一个数组(Python中虽说不叫数组,但我叫习惯了),其中包含了两个值(我用的是双核CPU),而为False的话就只有一个值了。所以说当percpu为True的时候,会返回每一个CPU的使用率,而为False则是总使用率。

     

  • socketio.emit

    socket.emit('action');表示发送了一个action命令,命令是字符串的,在另一端接收时,可以这么写: socket.on('action',function(){...});
    socket.emit('action',data);表示发送了一个action命令,还有data数据,在另一端接收时,可以这么写: socket.on('action',function(data){...});
    socket.emit(action,arg1,arg2); 表示发送了一个action命令,还有两个数据,在另一端接收时,可以这么写: socket.on('action',function(arg1,arg2){...});
    在emit方法中包含回调函数,例如:
    socket.emit('action',data, function(arg1,arg2){...} );那么这里面有一个回调函数可以在另一端调用,另一端可以这么写:socket.on('action',function(data,fn){   fn('a','b') ;  });
    上面的data数据可以有0个或者多个,相应的在另一端改变function中参数的个数即可,function中的参数个数和顺序应该和发送时一致

    上面的fn表示另一个端传递过来的参数,是个函数,写fn('a','b') ;会回调函数执行。一次发送不应该写多个回调,否则只有最后一个起效,回调应作为最后一个参数。

    转自:http://www.cnblogs.com/liuswi/p/4033282.html

 

from flask import Flask, render_template, session, request

# socketio
from flask_socketio import SocketIO, emit

# threading
from threading import Lock

# 用于内存、时间等获取的库
import psutil
import time 

实践

mainapp.py

# cpu_and_mem_monitor
# 参考别人的代码,学习实践
# 思路:后端后台一旦产生数据,即刻推送到前端

from flask import Flask, render_template, session, request

# socketio
from flask_socketio import SocketIO, emit

# threading
from threading import Lock

# 用于内存、时间等获取的库
import psutil
import time 


async_mode = None

# 初始化一个flask应用
app = Flask(__name__)
# 进行session秘钥配置
app.config['SECRET_KEY'] = 'asdfsf'
socketio = SocketIO(app, async_mode=async_mode)

thread = None
thread_lock = Lock()

# 后台线程,采集计算机数据,实时推送给前端
def background_thread():
    count = 0
    while True:
        socketio.sleep(2)
        count = count + 1
        t = time.strftime('%M:%S', time.localtime()) # 获取系统时间,此处只取分秒
        cpus = psutil.cpu_percent(interval=None, percpu=True) # 获取系统cpu使用率 non-blocking
        socketio.emit('server_response',
                        {'data': [t] + list(cpus)[0:4], 'count':count},
                        namespace='/test') # 不需要客户端连接上下文,默认broadcast = True

        print([t] + list(cpus)[0:4])
        print(100*'*')
    
#### 

@app.route('/')
def index():
    return render_template('index.html', async_mode=socketio.async_mode)
    # 每次执行render_template函数时,渲染器都会将index.html的变量值用实际值替代。

# 与前端建立socket连接后,启动后台线程
@socketio.on('connect', namespace='/test')
def test_connect():
    global thread
    with thread_lock:
        if thread is None:
            thread = socketio.start_background_task(target = background_thread)
        
if __name__ == "__main__":
    socketio.run(app, debug=True)

        index.html




    
    
    
    cpu and mem monitor
    
    
    
    


    
    

        效果:

Flask实战:实现简单的计算机资源监控系统,动态数据展示_第1张图片

 

你可能感兴趣的:(Python3,Flask)