簡體   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