Задать вопрос

Как найти утечку памяти в асинхронном скрипте?

Есть скрипт, который в асинхронном режиме слушает udp-порты с помощью библиотеки asyncio_dgram:
ss = await asyncio_dgram.bind((listen_ip, self.port))

В цикле, поступившая информация пишется в лог (в файл и консоль):
while True:
    try:
        data, addr = await ss.recv()
        self.logger.debug('{}'.format(data.hex()))
        await asyncio.sleep(1)

При запуске скрипта видно, что и в консоль, и в файлы информация записывается (объём файлов с логами растёт). Запускаю htop и вижу, как с течением времени скрипт потребляет всё больше и больше оперативной памяти. В конечном итоге выполнение скрипта приостанавливается, либо обработка начинает занимать очень долгое время, так как израсходавана вся оперативная память. Но сам скрипт не останавливается, не выбрасывается какое-либо исключение. Подскажите, где может происходить утечка памяти? Спасибо.
  • Вопрос задан
  • 341 просмотр
Подписаться 5 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
netpastor
@netpastor
Python developer
Ну первое что на ум приходит - ты слушаешь сокет, получаешь оттуда данные в буфер и он растет по мере роста объема входных данных
Ответ написан
@Cenzor Автор вопроса
переписал на aio-udp-server, всё работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы