私のプログラムは、数秒ごとにメガバイトを消費しています。私はPythonがガベージコレクションでcurorsを認識しないことを読んだので、私の使用に何か問題があり、どこかで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 = []
メタデータブロックまたはその一部を挿入ブロックに移動し、挿入ごとに接続を閉じる必要がありますか?
編集:
Q:それはすべて安定していますか?
A: プロセスを吹き飛ばす Linux を数えた場合のみ :-) (グラフはメモリ使用量からバッファ/キャッシュを除外しています)