Программа на python замедляется со временем - feedparser
У меня есть программа на Python, которая работает в цикле и загружает 20k RSS-каналов с использованием feedparser и вставляет данные фидов в RDBMS.
Я заметил, что он начинается с 20-30 кормлений в минуту и постепенно замедляется. Через пару часов это сводится к 4-5 кормлениям в час. Если я убью программу и перезапущу с того места, где она ушла, снова пропускная способность будет 20-30 каналов в минуту.
Это, конечно, не MySQL, который замедляется.
Можете ли вы предложить некоторые потенциальные проблемы с программой?
Спасибо
1 ответ
По всей вероятности, проблема связана с памятью. Вы, вероятно, держите каналы в памяти или каким-то образом накапливаете память, которая не получает мусор. Для диагностики:
- Посмотрите на размер вашей задачи (диспетчер задач, если windows и top, если unix/Linux) и следите за тем, как она растет вместе с фидами.
- Затем вы можете использовать профилировщик памяти, чтобы выяснить, что именно потребляет память
- Как только вы обнаружили, что вы можете кодировать по-другому, может быть,
Несколько советов:
- Сделайте явный вызов сборки мусора (gc.collect()) после установки любых соответствующих неиспользуемых структур данных на пустое
- Используйте многопроцессорную схему, в которой вы создаете несколько процессов, каждый из которых обрабатывает меньшее количество каналов.
- Возможно, перейдите на 64-битную систему, если вы используете 32-битную
Некоторые предложения по профилированию памяти:
- https://pypi.python.org/pypi/memory_profiler Это довольно хорошо, а декораторы полезны
- /questions/35801894/kakoj-profilirovschik-pamyati-python-rekomenduetsya/35801909#35801909