Linux上的Python SQLAlchemy内存泄漏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux上的Python SQLAlchemy内存泄漏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1090字,纯文字阅读大概需要2分钟。
内容图文
![Linux上的Python SQLAlchemy内存泄漏](/upload/InfoBanner/zyjiaocheng/885/638df1885bb7498687dc21038f4bed07.jpg)
我写了一个遍历大型数据库表的脚本. (?150K行.)为了避免使用过多的内存,我使用了windowed_query method.我的脚本如下所示:
query = db.query(Table)
count = 0
for row in windowed_query(query, Table.id, 1000):
points = 0
# +100 points for a logo
if row.logo_id:
points += 100
# +10 points for each image
points += 10 * len(row.images) #images is a SQLAlchemy one-to-many relationship
#...The script continues with much of the same...
row.points = points
db.add(row)
count += 1
if count % 100 == 0:
db.commit()
print count
request.db.commit()
当尝试在CentOS服务器上运行它时,它要经过9000行,然后才能被内核杀死,因为它使用的内存约为2GB.
在我的Mac开发环境中,即使它在完全相同的Python(2.7.3),SQLAlchemy(0.7.8)和psycopg2(2.4.5)的相同版本上运行,它的作用也一样.
使用memory_profiler进行一些简单的调试:在Linux上,查询数据库的每段代码都会少量增加内存,并且增长不会停止.在Mac上,发生了同样的事情,但是在增长约4MB之后,它趋于平稳.就像在Linux上一样,没有任何垃圾被收集. (我什至尝试每100行运行gc.collect().什么也没做.)
有人知道发生了什么吗?
解决方法:
事实证明,Pyramid的debugtoolbar已启用,这是占用大量内存的原因.我禁用了它,脚本运行得像个魅力.
内容总结
以上是互联网集市为您收集整理的Linux上的Python SQLAlchemy内存泄漏全部内容,希望文章能够帮你解决Linux上的Python SQLAlchemy内存泄漏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。