这个脚本慢慢吃掉我的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)
答案 0 :(得分:2)
在向右剥回并与SA IRC频道上的某个人聊天之后,它似乎只是Mac OSX的一个问题。所以我在Linux上设置它但同样的事情发生了。最后,我使用了crontab上的脚本。现在工作正常。
中号
答案 1 :(得分:0)
你可能想看看 mdb 是否正在慢慢变大,因为它做得更多。这就是我认为会发生这种情况的原因。它是唯一一个在您的示例中看起来不像垃圾收集的对象,它也恰好是一个对象。因此,我肯定会研究它正在做什么,因为它越来越多地被使用。
我想知道它是否正在维护已执行的查询列表。
答案 2 :(得分:0)
只需3个问题
session
来自哪里?
为什么不将mdb = Connection().haystack
放入while True
循环(以及btw session.close()
)?并将mdb
和session
传递给syncPlacements
?
仅使用两个差异复制整个代码块(即计算匹配,保存或删除)?