[英]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.