본문 바로가기
지속가능티끌/Python

Python. 문자열 + 연산자 메모리 누수 생김 . 주의 필요.

by 리치굿맨 2021. 11. 4.

 

개요

 

파이썬은 메모리 해제가 자동으로 이뤄진다길래 아무거나 사용해도 되는 줄 알았으나, 메모리 누수 생기는 경우 경험함.  

 

 

오류 상황예.

 

- 아래 함수는 거래소에서 웹소켓기반 실시간 수신되는 체결 틱 데이터를 DB 에 저장하는 함수인데 첫부분에 SQL 쿼리문 만들기 위하여  문자열 + 연산자로 처리했었던것. 

 

-  암호화폐 거래소의 30여개 종목의 실시간 체결 틱 데이터 수신 될 때 마다 아래 함수 호출하는데  2일 정도 지나면   반드시 PC 메모리 다 잡아먹고 먹통 만들었음.  

 


def insert_new_fill(_symbol, _trade_price, _trade_volume, _ask_bid,_trade_date, _trade_time, _i_timestamp):

    str_sql_insert = 'INSERT INTO T_Market_Fill (symbol, trade_price, trade_volume, ask_bid,trade_date, trade_time, timestamp) VALUES ("'
    str_sql_insert += _symbol + '","'
    str_sql_insert += _trade_price + '","'
    str_sql_insert += _trade_volume + '","'
    str_sql_insert += _ask_bid + '","'
    str_sql_insert += _trade_date + '","'
    str_sql_insert += _trade_time + '",'
    str_sql_insert += str(_i_timestamp) 
    str_sql_insert += ')'

    #print(str_sql_insert)

    CON_DB_CYFIN_MARKET_FILL.execute(str_sql_insert) 

    CON_DB_CYFIN_MARKET_FILL.commit()

 

 

 

해결책 

 

위 코드에서 문자열 + 연산자 사용하지 않고, 아래처럼 SQL 문자열 구성  구현하면 메모리 누수 안생김. 

 

 


def insert_new_fill(_symbol, _trade_price, _trade_volume, _ask_bid,_trade_date, _trade_time, _i_timestamp):

    str_sql_insert = 'INSERT INTO T_Market_Fill (symbol, trade_price, trade_volume, ask_bid,trade_date, trade_time, timestamp) \
    VALUES ("%s","%s","%s","%s","%s","%s","%s")' \
    % (_symbol, _trade_price,_trade_volume, _ask_bid,_trade_date ,_trade_time, str(_i_timestamp))

    #print(str_sql_insert)

    CON_DB_CYFIN_MARKET_FILL.execute(str_sql_insert) 

    CON_DB_CYFIN_MARKET_FILL.commit()

 

 

 

 


첫 등록 : 2021.11.03

최종 수정 : 

단축 주소 : https://igotit.tistory.com/3043

 


 

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT