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

时间:2011-11-10 23:06:46

标签: python sqlalchemy pymongo

这个脚本慢慢吃掉我的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)

3 个答案:

答案 0 :(得分:2)

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

中号

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

只需3个问题

session来自哪里?

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

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