Django获取服务器信息系统设计----(3)cpu折线图表(Celery异步任务、定时任务)


项目地址:

https://gitee.com/sdsnzy/sys-info


帮助文档:


接上篇博客:

Django获取服务器信息系统设计----(1)项目基本框架

Django获取服务器信息系统设计----(2)展示首页信息、用户页显示、cpu信息(表格、Echarts饼图、折线图)



一、安装必须内容


1.1 安装redis数据库


Windows安装Redis:https://www.redis.com.cn/redis-installation.html

在这里插入图片描述

1.2 安装依赖包


pip install celery
pip install django-celery-beat
pip install django-celery-results
pip install redis

二、配置


Celery定时任务和异步任务:Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统。大白话理解处理异步任务和定时任务的工具。

Django+Celery参考文档:https://www.cnblogs.com/huang-yc/p/10110754.html

在这里插入图片描述

2.1 celery基本配置


1)sysInfo/celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 设置django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sysInfo.settings')
app = Celery('sysInfo')
#  使用CELERY_ 作为前缀,在settings中写配置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 发现任务文件每个app下的task.py
app.autodiscover_tasks()

2)sysInfo/__init__.py

from __future__ import absolute_import, unicode_literals
# 引入celery实例对象
from .celery import app as celery_app
__all__ = ['celery_app']

3)sysInfo/settings.py

# celery configure
# Broker配置,使用Redis作为消息中间件
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'
# BACKEND配置,这里使用redis
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'
# 结果序列化方案
CELERY_RESULT_SERIALIZER = 'json'

3)测试celery配置是否成功:在Django中编写和执行自己的异步任务前,一定要先测试redis和celery是否安装好并配置成功。

【Celery配置易错:https://zhuanlan.zhihu.com/p/139951976

Windows下启动:

  • 写入:work.sh(任选一条,第一条需要装 eventlet )
#此时建议第一条
# Celery -A sysInfo worker -l info -P eventlet
# Celery -A sysInfo worker -l info --pool=solo

在这里插入图片描述


2.2 定义任务


1)定义任务host/tasks.py

import psutil
from celery import shared_task
# 数据库
from host.models import UserCpuPercent
# 任务
@shared_task()
def scan_cpu_info():
    percent = UserCpuPercent( user_percent=psutil.cpu_times_percent().user)
    percent.save()

2)测试:执行 work.sh 中的命令显示下列结果即为成功

在这里插入图片描述

2.3 使用定时任务


如果想要在django中使用定时任务功能同样是靠beat完成任务发送功能,当在Django中使用定时任务时,需要安装django-celery-beat插件。

1)安装插件:pip install django-celery-beat

2)添加app到主配置文件:sysInfo/settings.py

INSTALLED_APPS = [
    ....   
    'django_celery_beat',
]

3)迁移数据库:

python manage.py migrate

2.4 添加任务


1)此时登陆后台管理:http://localhost:9999/admin/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 开启任务测试


1)启动worker:work.sh(任选一条,第一条需要装 eventlet )

# Celery -A sysInfo worker -l info -P eventlet
# Celery -A sysInfo worker -l info --pool=solo

2)启动beat:start_celery.sh

celery -A sysInfo beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

3)查看数据库表中已经有了数据
在这里插入图片描述

三、cpu折线图-前端页面


templates/host/cpu-line.html

<!-- 继承base模板 -->
{% extends 'host/base.html' %}
<!-- 计算过滤器 -->
{% load filter %}
{% block title %} cpu信息 {% endblock %}
{% block content %}
    {% include 'host/cpu-header.html' %}
    <div>
        <div id="main" style="width: 80%;height:400px;"></div>
    </div>

    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 首先,声明两个 javascript 的数组
        var series_data = []; // 纵轴数据
        var xAxis_data = []; // 横轴数据

        // 使用循环,依次将数据库需要展示的数据添加到刚才声明的数组中
        {
     
     % for data in datas %}

            series_data.push({
     
     {
     
      data.user_percent }})
            // 注意这里的双引号
            xAxis_data.push("{
     
     { data.create_time}}")
        {
     
     % endfor %}

        option = {
     
     
            xAxis: {
     
     
                type: 'category',
                data: xAxis_data
            },
            yAxis: {
     
     
                type: 'value'
            },
            series: [{
     
     
                data: series_data,
                type: 'line',
                smooth: true
            }]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>

{% endblock %}

四、测试


访问:http://localhost:9999/cpu/line/

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46069582/article/details/114761408