gpt4 book ai didi

python - 在 Debian Wheezy 上使用 flask-sqlalchemy 怪异的内存使用和泄漏

转载 作者:太空狗 更新时间:2023-10-29 11:15:22 26 4
gpt4 key购买 nike

我正在制作一个简单的 Web 应用程序,它使用 flask-sqlalchemy 从 MySQL 数据库中提取(很多?目前在两个表中超过 64000 个字段并且还在增加)数据。我只运行了一个实例,并没有注意到任何问题,直到我用完 RAM 并且事情停止了。我意识到

我可能不得不重新考虑这整个事情是如何工作的,因为我不能继续添加 RAM(它是一个小型虚拟机,所以我从 512 MB 增加到 768 MB,但仍然)......但是 surly Python 应该发布处理请求后的内存?事实上,当在我的 Windows 机器上运行相同的 flask 应用程序时,它会占用 RAM(但只有一半!),当它完成时它就会被释放。在运行许多(据说)微型应用程序的 Debian 机器上并非如此。据我所知,两台机器上运行的 lib 版本是相同的。 Debian 机器甚至拥有比 Windows 机器更高的 Python 版本。他们都连接到同一个数据库。我该如何继续?

from flask import Flask, request, jsonify
from flask.ext.sqlalchemy import SQLAlchemy

import re
from datetime import datetime

app = Flask(__name__)
app.config.from_pyfile('settings.cfg')
db = SQLAlchemy(app)

class Reports(db.Model):
__tablename__ = 'reports'

id = db.Column(db.Integer, primary_key=True)
ip = db.Column(db.Integer)
date = db.Column(db.DateTime)
sid = db.Column(db.Integer)
version = db.Column(db.Integer)
itemname = db.Column(db.String(25))
group = db.Column(db.Integer)
pclass = db.Column(db.String(15))
ltime = db.Column(db.Integer)
rlen = db.Column(db.Integer)
total = db.Column(db.Integer)

def __init__(self, pd):
self.date = datetime.utcnow()
self.sid = pd["sid"]
self.version = pd["version"]
self.itemname = pd["itemname"]
self.group = pd["group"]
self.pclass = pd["pclass"]
self.ltime = pd["ltime"]
self.rlen = pd["rlen"]
self.total = pd["total"]


class Perfdata(db.Model):
__tablename__ = 'perfdata'

reportid = db.Column(db.Integer, db.ForeignKey('reports.id'), primary_key=True)
l70 = db.Column(db.Integer)
l65 = db.Column(db.Integer)
l60 = db.Column(db.Integer)
l55 = db.Column(db.Integer)
l50 = db.Column(db.Integer)
l45 = db.Column(db.Integer)
l40 = db.Column(db.Integer)
l35 = db.Column(db.Integer)
l30 = db.Column(db.Integer)

def __init__(self, reportid, pd):
self.reportid = reportid
self.l70 = pd["l70"]
self.l65 = pd["l65"]
self.l60 = pd["l60"]
self.l55 = pd["l55"]
self.l50 = pd["l50"]
self.l45 = pd["l45"]
self.l40 = pd["l40"]
self.l35 = pd["l35"]
self.l30 = pd["l30"]

def buildlist(self):
plist = []

plist.append(self.l70)
plist.append(self.l65)
plist.append(self.l60)
plist.append(self.l55)
plist.append(self.l50)
plist.append(self.l45)
plist.append(self.l40)
plist.append(self.l35)
plist.append(self.l30)

return plist


@app.route('/ps', methods=['GET'])
def perfget():

response = []

for report, perf in db.session.query(Reports, Perfdata).all():

response.append("")

response.append("%s %s %s %s %s %s %s %s" % (report.version,
report.sid,
report.itemname,
report.group,
report.pclass,
report.ltime,
report.rlen,
report.total))

response.append("%s %s %s %s %s %s %s %s %s" % (perf.l70,
perf.l65,
perf.l60,
perf.l55,
perf.l50,
perf.l45,
perf.l40,
perf.l35,
perf.l30))

return '<br>\n'.join(response)


if __name__ == '__main__':
app.run()

最佳答案

Python 可能不知道何时释放内存,因此您可以帮助它解决问题:

import gc
gc.collect()

关于python - 在 Debian Wheezy 上使用 flask-sqlalchemy 怪异的内存使用和泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com