[英]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()
)? 并将mdb
和session
传递给syncPlacements
?
整个代码块只复制两个差异(即计算匹配,保存或删除)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.