我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PythonFlask利用SocketIO库实现图表的绘制

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PythonFlask利用SocketIO库实现图表的绘制

Flask 默认提供了针对WebSocket的支持插件from flask_socketio import SocketIO 直接通过pip命令安装即可导入使用,前端也需要引入socketIO库文件,其网站首页是:socket.io/

实现简单的数据通信

新建index.html

<!--name:index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" class="lazy" data-src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
    <script type="text/javascript" class="lazy" data-src="http://cdn.bootcss.com/socket.io/1.7.0/socket.io.min.js"></script>
</head>
<body>
<script type="text/javascript" charset="UTF-8">
    $(document).ready(function() {
        namespace = '/Socket';
        var socket = io.connect("http://" + document.domain + ":" + location.port + namespace);
        socket.emit("message",{"data":"hello lyshark"});  // 初始化完成后,发送一条消息.
        socket.on('response', function(recv) {
            console.log(recv.Data)
        });
    });
</script>
</body>
</html>

app.py

# name: app.py
from flask import Flask,render_template,request
from flask_socketio import SocketIO

async_mode = None
app = Flask(__name__)
app.config['SECRET_KEY'] = "lyshark"
socketio = SocketIO(app)

@app.route("/")
def index():
    return render_template("index.html")

# 出现消息后,率先执行此处
@socketio.on("message",namespace="/Socket")
def socket(message):
    print("接收到消息:",message['data'])
    for i in range(1,100):
        socketio.sleep(1)
        socketio.emit("response",          # 绑定通信
                      {"Data":i},           # 返回socket数据
                      namespace="/Socket")

# 当websocket连接成功时,自动触发connect默认方法
@socketio.on("connect",namespace="/Socket")
def connect():
    print("链接建立成功..")

# 当websocket连接失败时,自动触发disconnect默认方法
@socketio.on("disconnect",namespace="/Socket")
def disconnect():
    print("链接建立失败..")

if __name__ == '__main__':
    socketio.run(app,debug=True,host="0.0.0.0")

效果如下,程序会每隔一秒钟同步一次数据,在控制台中可看到。

使用SocketIO库绘制主机动态图形

前端第一个脚本,用于接收数据。

   <script type="text/javascript" charset="UTF-8">
        // 负责接收目标主机的CPU负载情况
        $(document).ready(function() {
            namespace = '/Socket';
            var socket = io.connect("http://" + document.domain + ":" + location.port + namespace);
            socket.emit("message",{"data":"hello lyshark"});  // 初始化完成后,发送一条消息.
            socket.on('response', function(recv) {
                //console.log(recv.Data);
                update(recv)   // 发送到update函数处理请求
            });
        });
    </script>

第二个脚本负责解析参数

    <script type="text/javascript" charset="UTF-8">
        // 负责对参数的解析
        var time =["","","","","","","","","",""];
        var cpu = [0,0,0,0,0,0,0,0,0,0];
        var update = function(recv){
            time.push(recv.Data[0]);
            cpu.push(parseFloat(recv.Data[1]));
            if(time.length >=10){
                time.shift();
                cpu.shift();
                console.log(time)
                display(time,cpu)  // 调用绘图函数
            }
        };
    </script>

最后一段代码负责,调用百度绘图库,进行图形的呈现。

    <div id="main" style="height:500px;width:1200px;border:1px solid #eecc11;padding:10px;"></div>
    <script type="text/javascript" charset="UTF-8">
            var display = function(time,cpu){
                // 负责初始化绘图画布
                var myChart = echarts.init(document.getElementById('main'));
                myChart.setOption({
            title: {
                text: '监控系统CPU资源'
            },
            tooltip: {},
            xAxis: {
                data: []
            },
            yAxis: {},
            series: [{
                name: 'cpu',
                type: 'line',
                data: []
            }]
        });
            // 下方就是给指定字段填充数据
            myChart.setOption({
                xAxis: {
                    data: time
                },
                series: [{
                    name: 'cpu', // 根据名字对应到相应的系列
                    data: cpu
                }]
            });
        };
        // 首次显示加载动画
        myChart.showLoading();
    </script>

后端直接区数据并发送给前台 app.py 需要注意flask 开头写法不再是app()而要改成 socketio.run(app,debug=True,host="0.0.0.0")才可以

# name: app.py
from flask import Flask,render_template,request
from flask_socketio import SocketIO
import time,psutil
async_mode = None
app = Flask(__name__)
app.config['SECRET_KEY'] = "lyshark"
socketio = SocketIO(app)

@app.route("/")
def index():
    return render_template("index.html")

# 出现消息后,率先执行此处
@socketio.on("message",namespace="/Socket")
def socket(message):
    print("接收到消息:",message['data'])
    while True:
        socketio.sleep(60)
        data = time.strftime("%M:%S",time.localtime())
        cpu = psutil.cpu_percent(interval=None,percpu=True)
        socketio.emit("response",
                      {"Data":[data,cpu]},
                      namespace="/Socket")

if __name__ == '__main__':
    socketio.run(app,debug=True,host="0.0.0.0")

最终统计效果如下所示,当然也可以批量统计存入数据库,需要的时候直接调用绘图。

百度绘图库(官方地址):https://echartsjs.com/

Ajax实现定时器 另一种实现定时器定时获取数据的方法

<button type="button" class="btn btn-success" id="btn">定时</button>

<script>
    $("#btn").click(function(){
        var count = setInterval(function(){
            $.ajax({
                url:"/_get/",
                type:"POST",
                contentType:"application/json;charset=utf-8",
                success:function (data) {
                    var data = JSON.parse(data);
                    console.log("当前进度:" + data.flag);
                    $("#1111").width(data.flag);
                    if (data.flag == 100){
                        clearInterval(count);
                    }
                }
            })
            },2000);  // 每两秒执行一次
        });
</script>

到此这篇关于Python Flask利用SocketIO库实现图表的绘制的文章就介绍到这了,更多相关Python Flask SocketIO绘制图表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PythonFlask利用SocketIO库实现图表的绘制

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PythonFlask利用SocketIO库实现图表的绘制

这篇文章主要为大家详细介绍了PythonFlask框架如何利用SocketIO库实现图表的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-22

如何利用python库matplotlib绘制不同的图表

这篇文章主要介绍如何利用python库matplotlib绘制不同的图表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、绘制简单曲线图思路:通过3个坐标点,绘制曲线import matplotlib.pyplot
2023-06-29

JavaScript利用el-table实现绘制热度表

这篇文章主要为大家详细介绍了JavaScript如何利用el-table实现绘制热度表,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-03-19

利用Python实现绘制论文中的曲线图

这篇文章主要为大家详细介绍了如何利用Python语言实现绘制论文中需要的曲线图,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-03-24

利用matplotlib+numpy绘制多种绘图的方法实例

前言 matplotlib 是Python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。本文将以例子的形式分析matplot中支持的,分析中常用的几种图。其中包括填充图、散点图(scatter pl
2022-06-04

利用Matplotlib实现单画布绘制多个子图

这篇文章主要介绍了利用Matplotlib实现单画布绘制多个子图,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-07

Python利用D3Blocks绘制可动态交互的图表

今天小编给大家来介绍一款十分好用的可视化模块,D3Blocks,不仅可以用来绘制可动态交互的图表,并且导出的图表可以是HTML格式,方便在浏览器上面呈现,感兴趣的可以了解一下
2023-02-03

Python利用Pytorch实现绘制ROC与PR曲线图

这篇文章主要和大家分享一下Python利用Pytorch实现绘制ROC与PR曲线图的相关代码,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
2022-12-30

python利用matplotlib库绘制饼图的方法示例

介绍 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。 它的文档相当完备,并且 Gallery页面 中有上百
2022-06-04

Matlab怎么实现动态表白图的绘制

这篇文章主要介绍了Matlab怎么实现动态表白图的绘制的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matlab怎么实现动态表白图的绘制文章都会有所收获,下面我们一起来看看吧。提前祝女朋友节日快乐1 展现这里没
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录