要用Python的Flask框架结合MySQL写一个内存监控程序,需要完成以下步骤:
- 安装Flask和MySQL模块
在命令行中输入以下命令:
pip install Flask
pip install mysql-connector-python
- 创建MySQL数据库
在MySQL中创建一个名为“memory_monitor”的数据库,并在其中创建一个名为“memory”的表,该表包含以下列:
id int(11) 主键,自增长
value int(11) 内存使用量,单位为MB
time timestamp 记录时间,精确到秒
- 创建Flask应用程序
编写Flask应用程序,具体步骤如下:
- 导入模块
在Python代码中导入所需模块:
from flask import Flask, render_template, request
import mysql.connector
- 创建Flask对象
使用Flask()函数创建一个Flask对象,并指定静态文件路径:
app = Flask(__name__, static_folder='static')
- 连接数据库
在应用程序中使用mysql.connector模块连接数据库:
config = {
'user': 'root',
'password': 'password',
'host': '127.0.0.1',
'database': 'memory_monitor'
}
cnx = mysql.connector.connect(**config)
- 创建路由
使用route装饰器创建路由:
@app.route('/')
def index():
return render_template('index.html')
@app.route('/monitor', methods=['POST'])
def monitor():
value = request.form['value']
cursor = cnx.cursor()
add_data = ("INSERT INTO memory "
"(value) "
"VALUES (%s)")
data_value = (value,)
cursor.execute(add_data, data_value)
cnx.commit()
cursor.close()
return 'success'
@app.route('/chart')
def chart():
cursor = cnx.cursor()
query = ("SELECT * FROM memory "
"ORDER BY time ASC")
cursor.execute(query)
rows = cursor.fetchall()
data = []
for row in rows:
data.append([row[2].strftime('%Y-%m-%d %H:%M:%S'), row[1]])
cursor.close()
return render_template('chart.html', data=data)
在上面的代码中,index()函数返回一个html页面,该页面包含一个输入框和一个提交按钮,用户可以在该输入框中输入当前的内存使用量,然后提交到服务器上。monitor()函数处理这个POST请求,将输入的值插入到数据库中,并返回“success”字符串。chart()函数返回一个html页面,该页面展示内存使用量随时间的变化曲线。
- 运行应用程序
使用run函数启动应用程序:
if __name__ == '__main__':
app.run(debug=True)
- 编写html模板
编写index.html模板:
<!DOCTYPE html>
<html>
<head>
<title>Memory Monitor</title>
</head>
<body>
<form action="/monitor" method="POST">
<label>Memory Usage:</label>
<input type="text" name="value" /> MB
<br />
<input type="submit" value="Submit" />
</form>
</body>
</html>
编写chart.html模板:
<!DOCTYPE html>
<html>
<head>
<title>Memory Monitor</title>
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
</head>
<body>
<div id="chart"></div>
<script>
var data = {{ data|tojson }};
var chart = new ApexCharts(document.querySelector("#chart"), {
series: [{
name: 'Memory Usage',
data: data
}],
chart: {
type: 'line',
height: 350
},
xaxis: {
type: 'datetime'
},
title: {
text: 'Memory Monitor',
align: 'center'
}
});
chart.render();
</script>
</body>
</html>
在上面的代码中,使用了一个名为ApexCharts的JavaScript库,该库可用于绘制图表。需要在head标签中引入该库,即通过CDN的方式引入。
- 运行程序
通过命令行进入到程序所在的目录,并执行以下命令:
export FLASK_APP=main.py
flask run
运行成功后,会在命令行中看到如下输出信息:
* Serving Flask app "main"
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
在浏览器中打开http://127.0.0.1:5000/地址,即可看到一个表单页面,在该页面中输入内存使用量并提交,之后再访问http://127.0.0.1:5000/chart地址,即可看到内存使用量随时间的变化曲线图。
示例一:获取系统内存使用量
import psutil
memory = psutil.virtual_memory()
print(memory.used / 1024 / 1024)
在这个示例中,使用了Python的psutil库来获取系统的内存使用量,使用.virtual_memory()函数获取到总内存和使用的内存,再通过计算得到了当前使用的内存并输出。
示例二:读取MySQL数据库中的内存使用量
import mysql.connector
config = {
'user': 'root',
'password': 'password',
'host': '127.0.0.1',
'database': 'memory_monitor'
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()
query = ("SELECT * FROM memory "
"ORDER BY time DESC "
"LIMIT 1")
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
print(row[1])
cursor.close()
cnx.close()
在这个示例中,使用了Python的mysql.connector库来连接MySQL数据库,并通过执行一条SELECT语句来读取最近一条内存使用量记录并输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Python的Flask框架结合MySQL写一个内存监控程序 - Python技术站