Программа на python замедляется со временем - feedparser

У меня есть программа на Python, которая работает в цикле и загружает 20k RSS-каналов с использованием feedparser и вставляет данные фидов в RDBMS.

Я заметил, что он начинается с 20-30 кормлений в минуту и ​​постепенно замедляется. Через пару часов это сводится к 4-5 кормлениям в час. Если я убью программу и перезапущу с того места, где она ушла, снова пропускная способность будет 20-30 каналов в минуту.

Это, конечно, не MySQL, который замедляется.

Можете ли вы предложить некоторые потенциальные проблемы с программой?

Спасибо

1 ответ

Решение

По всей вероятности, проблема связана с памятью. Вы, вероятно, держите каналы в памяти или каким-то образом накапливаете память, которая не получает мусор. Для диагностики:

  1. Посмотрите на размер вашей задачи (диспетчер задач, если windows и top, если unix/Linux) и следите за тем, как она растет вместе с фидами.
  2. Затем вы можете использовать профилировщик памяти, чтобы выяснить, что именно потребляет память
  3. Как только вы обнаружили, что вы можете кодировать по-другому, может быть,

Несколько советов:

  1. Сделайте явный вызов сборки мусора (gc.collect()) после установки любых соответствующих неиспользуемых структур данных на пустое
  2. Используйте многопроцессорную схему, в которой вы создаете несколько процессов, каждый из которых обрабатывает меньшее количество каналов.
  3. Возможно, перейдите на 64-битную систему, если вы используете 32-битную

Некоторые предложения по профилированию памяти:

  1. https://pypi.python.org/pypi/memory_profiler Это довольно хорошо, а декораторы полезны
  2. /questions/35801894/kakoj-profilirovschik-pamyati-python-rekomenduetsya/35801909#35801909
Другие вопросы по тегам