Задать вопрос
Dr_Elvis
@Dr_Elvis
В гугле забанен

Как правильно продумать архетектуру бота?

Привет!
Мне необходимо написать бота для телеги, который будет парсить некоторое количество страниц и смотреть были ли изменения. Если были - сообщить это в группу где он находится.
Сам код не проблема. Не могу сообразить как правильнее сделать это?
бот работает постоянно, а страницы нужно проверять, к примеру, раз в 10 минут. sleep ставить нет смысла - бот будет заморожен. Может быть быть сделать 2 файла? один с ботом, другой с парсером. Парсер будет запускаться по крону и если найдет изменения, то передает информацию боту и он оповещает. Идея вроде не плохая, но правильно ли это и как реализовать между ботом и просто скриптом-парсером?
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
@Denisca2828
threading? Тьфу ты, да что я несу...
Ответ написан
Dunaevlad
@Dunaevlad
Воспользуйтесь идеей замыкания, Вам не зачем расходовать ресурсы, используя многопоточность.
Ответ написан
Комментировать
@Alexa2007
Может быть быть сделать 2 файла?
Отличная идея, но и многопоточность прикрутить не сложно. Всё зависит от масштаба. Если это мини проект то проще всё в один файл запхнуть. А если крупный проект, то сам бот стоит разложить на несколько файлов. Так же не каждый сервер даст много вычислительных секунд, поэтому к техничесой стороне тоже стоит присмотреться. Что за тариф не переплачивать. Ну и т.д.
Попробуй реализовать любой вариант, а подводные камни по дороге вылезут. Вот тогда и напишешь если, что-то пойдет не так.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Ответ зависит от сложности парсинга, на самом деле.
Если у вас в парсинге большую часть времени занимает общение с сайтом, а затраты на сам парсинг минимальны, то можно обойтись без многопоточности, если использовать что-то типа aiohttp.
Оно может работать в одном рабочем цикле (реакторе) с остальным ботом, и не подвешивать его на время запроса к сайту.
Если же в парсинге значительную долю времени занимают вычисления, то тут уже нужна многопоточность, или даже многопроцессность.

Наконец, стоит использовать либо asyncio.Queue (без потоков) либо queue.Queue (с потоками), чтобы организовать передачу итогов парсинга боту. В первом случае бот может просто в цикле await'ить метод get() очереди, и по получению очередного блока данных формировать и отправлять сообщение.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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