Злоупотребление SQLAlchemy вызывает утечку памяти? - PullRequest
2 голосов
/ 05 апреля 2011

Моя программа высасывает мег каждые несколько секунд. Я читал, что python не видит курсоры в сборщике мусора, поэтому у меня есть ощущение, что я могу что-то не так делать с использованием pydbc и sqlalchemy и, возможно, не закрывать что-то где-то?

#Set up SQL Connection
def connect():
        conn_string = 'DRIVER={FreeTDS};Server=...;Database=...;UID=...;PWD=...'
        return pyodbc.connect(conn_string)

metadata = MetaData()
e = create_engine('mssql://', creator=connect)
c = e.connect()
metadata.bind = c
log_table = Table('Log', metadata, autoload=True)

...
atexit.register(cleanup)
#Core Loop
line_c = 0
inserts = []
insert_size = 2000
while True:
        #line = sys.stdin.readline()
        line = reader.readline()
        line_c +=1
        m = line_regex.match(line)
        if m:  
                fields = m.groupdict()
                ...
                inserts.append(fields)
                if line_c >= insert_size:
                        c.execute(log_table.insert(), inserts)
                        line_c = 0
                        inserts = []

Должен ли я переместить блок метаданных или его часть в блок вставки и закрыть соединение при каждой вставке?

Edit:
Q: Это каждый стабилизируется? enter image description here

A: Только если вы считаете, что Linux сдувает процесс :-) (График исключает буферы / кэш из использования памяти)

1 Ответ

1 голос
/ 05 апреля 2011

Я бы не стал винить SQLAlchemy. Это также может быть проблемой лежащего в основе драйвера. В общем, утечки памяти трудно обнаружить. В любом случае вы должны спросить в списке рассылки SQLALchemy, где основной разработчик Майкл Байер отвечает почти на каждый вопрос ... возможно, лучший шанс получить реальную помощь там ...

...