欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Flask利用SocketIO庫(kù)實(shí)現(xiàn)圖表的繪制

 更新時(shí)間:2022年12月22日 14:27:47   作者:LyShark  
這篇文章主要為大家詳細(xì)介紹了Python Flask框架如何利用SocketIO庫(kù)實(shí)現(xiàn)圖表的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

Flask 默認(rèn)提供了針對(duì)WebSocket的支持插件from flask_socketio import SocketIO 直接通過(guò)pip命令安裝即可導(dǎo)入使用,前端也需要引入socketIO庫(kù)文件,其網(wǎng)站首頁(yè)是:socket.io/

實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)通信

新建index.html

<!--name:index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
    <script type="text/javascript" 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"});  // 初始化完成后,發(fā)送一條消息.
        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")

# 出現(xiàn)消息后,率先執(zhí)行此處
@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數(shù)據(jù)
                      namespace="/Socket")

# 當(dāng)websocket連接成功時(shí),自動(dòng)觸發(fā)connect默認(rèn)方法
@socketio.on("connect",namespace="/Socket")
def connect():
    print("鏈接建立成功..")

# 當(dāng)websocket連接失敗時(shí),自動(dòng)觸發(fā)disconnect默認(rèn)方法
@socketio.on("disconnect",namespace="/Socket")
def disconnect():
    print("鏈接建立失敗..")

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

效果如下,程序會(huì)每隔一秒鐘同步一次數(shù)據(jù),在控制臺(tái)中可看到。

使用SocketIO庫(kù)繪制主機(jī)動(dòng)態(tài)圖形

前端第一個(gè)腳本,用于接收數(shù)據(jù)。

   <script type="text/javascript" charset="UTF-8">
        // 負(fù)責(zé)接收目標(biāo)主機(jī)的CPU負(fù)載情況
        $(document).ready(function() {
            namespace = '/Socket';
            var socket = io.connect("http://" + document.domain + ":" + location.port + namespace);
            socket.emit("message",{"data":"hello lyshark"});  // 初始化完成后,發(fā)送一條消息.
            socket.on('response', function(recv) {
                //console.log(recv.Data);
                update(recv)   // 發(fā)送到update函數(shù)處理請(qǐng)求
            });
        });
    </script>

第二個(gè)腳本負(fù)責(zé)解析參數(shù)

    <script type="text/javascript" charset="UTF-8">
        // 負(fù)責(zé)對(duì)參數(shù)的解析
        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)  // 調(diào)用繪圖函數(shù)
            }
        };
    </script>

最后一段代碼負(fù)責(zé),調(diào)用百度繪圖庫(kù),進(jìn)行圖形的呈現(xiàn)。

    <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){
                // 負(fù)責(zé)初始化繪圖畫布
                var myChart = echarts.init(document.getElementById('main'));
                myChart.setOption({
            title: {
                text: '監(jiān)控系統(tǒng)CPU資源'
            },
            tooltip: {},
            xAxis: {
                data: []
            },
            yAxis: {},
            series: [{
                name: 'cpu',
                type: 'line',
                data: []
            }]
        });
            // 下方就是給指定字段填充數(shù)據(jù)
            myChart.setOption({
                xAxis: {
                    data: time
                },
                series: [{
                    name: 'cpu', // 根據(jù)名字對(duì)應(yīng)到相應(yīng)的系列
                    data: cpu
                }]
            });
        };
        // 首次顯示加載動(dòng)畫
        myChart.showLoading();
    </script>

后端直接區(qū)數(shù)據(jù)并發(fā)送給前臺(tái) 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")

# 出現(xiàn)消息后,率先執(zhí)行此處
@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")

最終統(tǒng)計(jì)效果如下所示,當(dāng)然也可以批量統(tǒng)計(jì)存入數(shù)據(jù)庫(kù),需要的時(shí)候直接調(diào)用繪圖。

百度繪圖庫(kù)(官方地址):https://echartsjs.com/

Ajax實(shí)現(xiàn)定時(shí)器 另一種實(shí)現(xiàn)定時(shí)器定時(shí)獲取數(shù)據(jù)的方法

<button type="button" class="btn btn-success" id="btn">定時(shí)</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("當(dāng)前進(jìn)度:" + data.flag);
                    $("#1111").width(data.flag);
                    if (data.flag == 100){
                        clearInterval(count);
                    }
                }
            })
            },2000);  // 每?jī)擅雸?zhí)行一次
        });
</script>

到此這篇關(guān)于Python Flask利用SocketIO庫(kù)實(shí)現(xiàn)圖表的繪制的文章就介紹到這了,更多相關(guān)Python Flask SocketIO繪制圖表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 隨機(jī)打亂 圖片和對(duì)應(yīng)的標(biāo)簽方法

    python 隨機(jī)打亂 圖片和對(duì)應(yīng)的標(biāo)簽方法

    今天小編就為大家分享一篇python 隨機(jī)打亂 圖片和對(duì)應(yīng)的標(biāo)簽方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • python3.6.4安裝opencv3.4.2的實(shí)現(xiàn)

    python3.6.4安裝opencv3.4.2的實(shí)現(xiàn)

    這篇文章主要介紹了python3.6.4安裝opencv3.4.2的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 如何在Flask中進(jìn)行異常處理實(shí)例解析

    如何在Flask中進(jìn)行異常處理實(shí)例解析

    這篇文章主要為大家介紹了如何在Flask中進(jìn)行異常處理實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Python基于Socket實(shí)現(xiàn)簡(jiǎn)易多人聊天室的示例代碼

    Python基于Socket實(shí)現(xiàn)簡(jiǎn)易多人聊天室的示例代碼

    這篇文章主要介紹了Python基于Socket實(shí)現(xiàn)簡(jiǎn)易多人聊天室的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • pandas 數(shù)據(jù)歸一化以及行刪除例程的方法

    pandas 數(shù)據(jù)歸一化以及行刪除例程的方法

    今天小編就為大家分享一篇pandas 數(shù)據(jù)歸一化以及行刪除例程的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Django緩存Cache使用詳解

    Django緩存Cache使用詳解

    這篇文章主要介紹了Django緩存Cache使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • PyQt5每天必學(xué)之布局管理

    PyQt5每天必學(xué)之布局管理

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之布局管理的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Tensorflow 實(shí)現(xiàn)分批量讀取數(shù)據(jù)

    Tensorflow 實(shí)現(xiàn)分批量讀取數(shù)據(jù)

    今天小編就為大家分享一篇Tensorflow 實(shí)現(xiàn)分批量讀取數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python異步編程之a(chǎn)syncio低階API的使用詳解

    python異步編程之a(chǎn)syncio低階API的使用詳解

    asyncio中低階API的種類很多,涉及到開發(fā)的5個(gè)方面,這篇文章主要為大家詳細(xì)介紹了這些低階API的具體使用,感興趣的小伙伴可以學(xué)習(xí)一下
    2024-01-01
  • 神經(jīng)網(wǎng)絡(luò)python源碼分享

    神經(jīng)網(wǎng)絡(luò)python源碼分享

    這篇文章主要介紹了神經(jīng)網(wǎng)絡(luò)python源碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12

最新評(píng)論