SQLAlchemy误用导致内存泄漏?

时间:2011-04-05 13:50:47

标签: python memory-leaks sqlalchemy pyodbc

我的节目每隔几秒就吸收一次。我读到python没有看到垃圾收集中的curors,所以我有一种感觉,我可能在使用pydbcsqlalchemy时可能做错了,而且可能没有关闭somwhere?

#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 = []

我是否可以将元数据块或其中的一部分移动到插入块并关闭每个插入的连接?

修改
问:它是否一直稳定下来? enter image description here

答:只有当你算上Linux吹掉这个过程:-)(图表确实从内存使用中排除了缓冲区/缓存)

1 个答案:

答案 0 :(得分:1)

我不一定会责怪SQLAlchemy。这也可能是底层驾驶员的问题。通常,内存泄漏很难检测到。在任何情况下,您都应该在SQLALchemy邮件列表中询问核心开发人员Michael Bayer几乎所做的响应 每一个问题......或许有更好的机会在那里得到真正的帮助......