Почему этот скрипт на python медленно жует мою оперативную память? - PullRequest
3 голосов
/ 11 ноября 2011

Этот скрипт медленно кушает мою оперативную память.Когда я запускаю его, я вижу, как использование Python в оперативной памяти увеличивается с каждым циклом примерно на 1 Мб, но я не могу понять, почему.Я понял, что это итерация запроса добавляет ОЗУ, но это все, что я могу понять.Любая помощь будет потрясающей.

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 ]

2 голосов
/ 11 ноября 2011

После удаления и разговора с парнем на канале SA IRC, это оказалось единственной проблемой Mac OSX. Поэтому я установил его на Linux, но произошло то же самое. В конце концов, я прибег к выполнению скрипта в crontab. Работает нормально сейчас.

M

0 голосов
/ 11 ноября 2011

Всего 3 вопроса

Откуда берется session?

Почему бы не поместить mdb = Connection().haystack в цикл while True (и кстати session.close() тоже)? И передать mdb и session на syncPlacements?

Весь блок кода копируется только с двумя различиями (то есть вычислять совпадения, сохранять или удалять)?

0 голосов
/ 11 ноября 2011

Возможно, вы захотите узнать, медленно ли увеличивается mdb , поскольку выполняет больше работы.Вот почему я предполагаю, что это произойдет.Это единственный объект, который не похож на мусор в вашем примере, и он также является объектом.Итак, я бы определенно посмотрел на то, что он делает, так как он используется все больше и больше.

Интересно, поддерживает ли он список выполненных запросов.

...