- 0
Написание демонов на python
Есть задача написать демона, который будет непрерывно обрабатывать данные. Задачу нужно решить на питоне с использованием минимального количества ресурсов.
Есть база из нескольких миллионов интернет адресов. Соответственно я вижу 2 узких места:
- Загрузка данных по сети.
- Запись обработанных результатов в базу.
Сложность в придумывании оптимальной архитектуры.
Была попытка использовать легкие нити с применением gevent. Создается несколько рабочих процессов: обновление очереди, сохранение в базу, непосредственно загружающие страницы. Решение не принесло ожидаемого результата из-за того, что блокировался интерпретатор из-за использования C кода (pycurl).
Сейчас используется аналогичное решение, но вместо нитей gevent используется модуль multiprocessing.
Решение в нынешнем виде не устраивает потому, что расходуется много лишних ресурсов и скорость оставляет желать лучшего.
Во-вторых, категорически не нравится вариант применения ассинхронных подходов. Создать список константной величины, запустить его в асинхронный обработчик и при получении всех результатов сохранить скопом в базу. Такой подход не нравится ввиду того, что расход ресурсов будет скачкообразным. Хотя подход очень простой.
В-третьих, не хотелось бы использовать такие средства как celery, поскольку они сильно раздувают архитектуру и тратят ресурсы. Обращаюсь к коллегам за помощью в поиске оптимального решения.