Привет.
Много читаю, сам не пишу. Знаю, что на этом канале есть Python специалисты. Хотел бы спросить вопрос связанный на тему memory leak/garbage collection.
На моем новом проекте используется Python. (Я сам не являюсь разработчиком Python). Один из сервисов приложения с CPython перевели на PyPy, чтобы сделать его более производительным.
Обнаружили, что сервис, запущенный на Pypy потребляет память так словно там есть memory leak. Однако, сервис запущен на PythonC работает иначе и с памятью все в порядке.
Немного изучив то как работает GC в PythonC/Pypy решил собрать метрики с помощью memory_profiler и понять в чем разница.
В итоге, обнаружил, что память затраченная на выполнение socketio.emit(source, payload, broadcast=True) только растет и практически не освобождается.
есть способы как заставить GC работать по другому, и я делал пару экспериментов, и все равно не добился результата.
Я не уверен, что запускать gc.collect() с периодичностью считается правильным.
Я также не уверен, что проблема в самом socketio package, и тем как он работает с PyPy.
Возможно нужно заставить работать GC правильнее, но мануально управлять памятью не хотелось бы.
Буду рад любым идеям.