sammchardy / python-binance

Binance Exchange API python implementation for automated trading
https://python-binance.readthedocs.io/en/latest/
MIT License
5.91k stars 2.19k forks source link

Possible memory leak #1271

Open crmoratelli opened 1 year ago

crmoratelli commented 1 year ago

I am using ThreadedDepthCacheManager to keep a local order book for many pairs. The order book depth is only 5. The problem is that the memory consumption is getting bigger and bigger until the process stops working or gets killed by the operating system.

Here is the minimal code that causes the problem. Just keep track of the process memory consumption for some minutes.

 from binance import ThreadedDepthCacheManager

 pairs = ['BUSDUSDT', 'SKLBUSD', 'SKLUSDT', 'GHSTBUSD', 'GHSTUSDT', 'DFBUSD', 'DFUSDT', 'JUVBUSD', 'JUVUSDT', 'PSGBUSD', 'PSGUSDT', 'BTCSTBUSD', 'BTCSTUSDT', 'DEXEBUSD', 'DEXEUSDT', 'CKBBUSD', 'CKBUSDT', 'TWTBUSD', 'TWTUSDT', 'LITBUSD', 'LITUSDT', 'SFPBUSD', 'SFPUSDT', 'FXSBUSD', 'FXSUSDT', 'DODOBUSD', 'DODOUSDT', 'BAKEBUSD', 'BAKEUSDT', '1INCHBUSD', '1INCHUSDT', 'BANDBUSD', 'BANDUSDT', 'GRTBUSD', 'GRTUSDT', 'IOSTBUSD', 'IOSTUSDT', 'OMGBUSD', 'OMGUSDT', 'REEFBUSD', 'REEFUSDT', 'ACMBUSD', 'ACMUSDT', 'AUCTIONBUSD', 'AUCTIONUSDT', 'PHABUSD', 'PHAUSDT', 'TVKBUSD', 'TVKUSDT', 'BADGERBUSD', 'BADGERUSDT', 'FISBUSD', 'FISUSDT', 'OMBUSD', 'OMUSDT', 'PONDBUSD', 'PONDUSDT', 'DEGOBUSD', 'DEGOUSDT', 'ALICEBUSD', 'ALICEUSDT', 'CHZBUSD', 'CHZUSDT', 'BIFIBUSD', 'BIFIUSDT', 'LINABUSD', 'LINAUSDT', 'PERPBUSD', 'PERPUSDT', 'SUPERBUSD', 'SUPERUSDT', 'CFXBUSD', 'CFXUSDT', 'XVGBUSD', 'XVGUSDT', 'AUTOBUSD', 'AUTOUSDT', 'TKOBUSD', 'TKOUSDT', 'TLMBUSD', 'TLMUSDT', 'HOTBUSD', 'HOTUSDT', 'MIRBUSD', 'MIRUSDT', 'BARBUSD', 'BARUSDT', 'FORTHBUSD', 'FORTHUSDT', 'BURGERBUSD', 'BURGERUSDT', 'SLPBUSD', 'SLPUSDT', 'SHIBBUSD', 'SHIBUSDT', 'ICPBUSD', 'ICPUSDT', 'ARBUSD', 'ARUSDT', 'POLSBUSD', 'POLSUSDT', 'MDXBUSD', 'MDXUSDT', 'MASKBUSD', 'MASKUSDT', 'LPTBUSD', 'LPTUSDT', 'CELRBUSD', 'CELRUSDT', 'ATMBUSD', 'ATMUSDT', 'ZENBUSD', 'ZENUSDT', 'FTMBUSD', 'FTMUSDT', 'THETABUSD', 'THETAUSDT', 'WINBUSD', 'WINUSDT', 'KAVABUSD', 'KAVAUSDT', 'ATABUSD', 'ATAUSDT', 'GTCBUSD', 'GTCUSDT', 'TORNBUSD', 'TORNUSDT', 'COTIBUSD', 'COTIUSDT', 'SCBUSD', 'SCUSDT', 'CHRBUSD', 'CHRUSDT', 'STMXBUSD', 'STMXUSDT', 'DOCKBUSD', 'DOCKUSDT', 'ERNBUSD', 'ERNUSDT', 'KLAYBUSD', 'KLAYUSDT', 'UTKBUSD', 'UTKUSDT', 'IOTXBUSD', 'IOTXUSDT', 'BONDBUSD', 'BONDUSDT', 'MLNBUSD', 'MLNUSDT', 'LTOBUSD', 'LTOUSDT', 'ADXBUSD', 'ADXUSDT', 'QUICKBUSD', 'QUICKUSDT', 'C98BUSD', 'C98USDT', 'CLVBUSD', 'CLVUSDT', 'QNTBUSD', 'QNTUSDT', 'FLOWBUSD', 'FLOWUSDT', 'XECBUSD', 'XECUSDT', 'MINABUSD', 'MINAUSDT', 'RAYBUSD', 'RAYUSDT', 'FARMBUSD', 'FARMUSDT', 'ALPACABUSD', 'ALPACAUSDT', 'ORNBUSD', 'ORNUSDT', 'MBOXBUSD', 'MBOXUSDT', 'WAXPBUSD', 'WAXPUSDT', 'TRIBEBUSD', 'TRIBEUSDT', 'MTLBUSD', 'MTLUSDT', 'OGNBUSD', 'OGNUSDT', 'DYDXBUSD', 'DYDXUSDT', 'ELFBUSD', 'ELFUSDT', 'GALABUSD', 'GALAUSDT', 'SUNBUSD', 'SUNUSDT', 'ILVBUSD', 'ILVUSDT', 'RENBUSD', 'RENUSDT', 'YGGBUSD', 'YGGUSDT', 'STXBUSD', 'STXUSDT', 'FETBUSD', 'FETUSDT', 'ARPABUSD', 'ARPAUSDT', 'LSKBUSD', 'LSKUSDT', 'FIDABUSD', 'FIDAUSDT', 'DENTBUSD', 'DENTUSDT', 'AGLDBUSD', 'AGLDUSDT', 'RADBUSD', 'RADUSDT', 'HIVEBUSD', 'HIVEUSDT', 'STPTBUSD', 'STPTUSDT', 'BETABUSD', 'BETAUSDT', 'RAREBUSD', 'RAREUSDT', 'TROYBUSD', 'TROYUSDT', 'CHESSBUSD', 'CHESSUSDT', 'SCRTBUSD', 'SCRTUSDT', 'CELOBUSD', 'CELOUSDT', 'DARBUSD', 'DARUSDT', 'BNXBUSD', 'BNXUSDT', 'LAZIOBUSD', 'LAZIOUSDT', 'OXTBUSD', 'OXTUSDT', 'MOVRBUSD', 'MOVRUSDT', 'CITYBUSD', 'CITYUSDT', 'ENSBUSD', 'ENSUSDT', 'ANKRBUSD', 'ANKRUSDT', 'QIBUSD', 'QIUSDT', 'POWRBUSD', 'POWRUSDT', 'JASMYBUSD', 'JASMYUSDT', 'AMPBUSD', 'AMPUSDT', 'PLABUSD', 'PLAUSDT', 'PYRBUSD', 'PYRUSDT', 'RNDRBUSD', 'RNDRUSDT', 'ALCXBUSD', 'ALCXUSDT', 'MCBUSD', 'MCUSDT', 'COCOSBUSD', 'COCOSUSDT', 'BICOBUSD', 'BICOUSDT', 'FLUXBUSD', 'FLUXUSDT', 'REQBUSD', 'REQUSDT', 'VOXELBUSD', 'VOXELUSDT', 'COSBUSD', 'COSUSDT', 'CTXCBUSD', 'CTXCUSDT', 'HIGHBUSD', 'HIGHUSDT', 'CVXBUSD', 'CVXUSDT', 'PEOPLEBUSD', 'PEOPLEUSDT', 'OOKIBUSD', 'OOKIUSDT', 'MDTBUSD', 'MDTUSDT', 'NULSBUSD', 'NULSUSDT', 'SPELLBUSD', 'SPELLUSDT', 'JOEBUSD', 'JOEUSDT', 'DUSKBUSD', 'DUSKUSDT', 'ACHBUSD', 'ACHUSDT', 'IMXBUSD', 'IMXUSDT', 'GLMRBUSD', 'GLMRUSDT', 'UMABUSD', 'UMAUSDT', 'LOKABUSD', 'LOKAUSDT', 'API3BUSD', 'API3USDT', 'ACABUSD', 'ACAUSDT', 'ANCBUSD', 'ANCUSDT', 'XNOBUSD', 'XNOUSDT', 'WOOBUSD', 'WOOUSDT', 'TFUELBUSD', 'TFUELUSDT', 'TBUSD', 'TUSDT', 'ASTRBUSD', 'ASTRUSDT', 'GMTBUSD', 'GMTUSDT', 'KDABUSD', 'KDAUSDT', 'APEBUSD', 'APEUSDT', 'ALPINEBUSD', 'ALPINEUSDT', 'BSWBUSD', 'BSWUSDT', 'SANTOSBUSD', 'SANTOSUSDT', 'MULTIBUSD', 'MULTIUSDT', 'PORTOBUSD', 'PORTOUSDT', 'BTTCBUSD', 'BTTCUSDT', 'MBLBUSD', 'MBLUSDT', 'MOBBUSD', 'MOBUSDT', 'NEXOBUSD', 'NEXOUSDT', 'GALBUSD', 'GALUSDT', 'LDOBUSD', 'LDOUSDT', 'EPXBUSD', 'EPXUSDT', 'STEEMBUSD', 'STEEMUSDT', 'CVCBUSD', 'CVCUSDT', 'REIBUSD', 'REIUSDT', 'DREPBUSD', 'DREPUSDT', 'AKROBUSD', 'AKROUSDT', 'PUNDIXBUSD', 'PUNDIXUSDT', 'LUNCBUSD', 'LUNCUSDT', 'OPBUSD', 'OPUSDT', 'OGBUSD', 'OGUSDT', 'KEYBUSD', 'KEYUSDT', 'ASRBUSD', 'ASRUSDT', 'FIROBUSD', 'FIROUSDT', 'NKNBUSD', 'NKNUSDT', 'GTOBUSD', 'GTOUSDT', 'LEVERBUSD', 'LEVERUSDT', 'STGBUSD', 'STGUSDT', 'PHBBUSD', 'PHBUSDT', 'NEBLBUSD', 'NEBLUSDT', 'GMXBUSD', 'GMXUSDT', 'POLYXBUSD', 'POLYXUSDT', 'APTBUSD', 'APTUSDT', 'OSMOBUSD', 'OSMOUSDT', 'HFTBUSD', 'HFTUSDT', 'VITEBUSD', 'VITEUSDT']

 def callback(depth):
    pass

 if __name__ == '__main__':
    dcm = ThreadedDepthCacheManager()
    dcm.start()  

    for p in pairs:
        dcm.start_depth_cache(callback, symbol=p, limit=5, ws_interval=100)

    dcm.join()

Maybe I missing something in this implementation, or do we have a memory leak?

Environment :