繁体   English   中英

为什么这个python脚本慢慢地嚼我的RAM?

[英]Why is this python script slowly chewing up my RAM?

这个脚本慢慢地吃了我的RAM。 当我运行它时,我可以看到Python的RAM使用量每个循环增加大约1mb,但我无法弄清楚原因。 我已经发现它是查询的迭代添加了RAM,但这是我能想到的。 任何帮助都是极好的。

from haystack.pmod import piliPlacement #this is the SA model
from time import sleep
from datetime import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker


now = datetime.now()


engine = create_engine('mssql://xxxxxxx;uid=user;pwd=xxxxx',echo=False)


Session = sessionmaker(bind=engine)


def syncPlacements(session):
    query = session.query(piliPlacement).filter(piliPlacement.Time > now)
    pili_placements = [p.ID_Placement for p in query.all()] # this is what adds the RAM
    del pili_placements
    print 'loop'


while True:
    session = Session()
    syncPlacements(session)
    sleep(3)

在将其剥离后,与SA IRC频道上的某个人聊天后,它似乎只是Mac OSX的一个问题。 所以我在Linux上设置它但同样的事情发生了。 最后,我使用了crontab上的脚本。 现在工作正常。

中号

您可能想看看mdb是否正在慢慢变大,因为它会更多工作。 这就是我认为会发生这种情况的原因。 它是唯一一个在您的示例中看起来不像垃圾收集的对象,它也恰好是一个对象。 因此,我肯定会研究它正在做什么,因为它被越来越多地使用。

我想知道它是否正在维护已执行的查询列表。

只有3个问题

session来自哪里?

为什么不将mdb = Connection().haystack放入while True循环(和btw session.close() )? 并将mdbsession传递给syncPlacements

整个代码块只复制两个差异(即计算匹配,保存或删除)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM