Dr_Elvis
@Dr_Elvis

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

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

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

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

Войти через центр авторизации
Похожие вопросы
Idaproject Москва
от 70 000 ₽
БАРС Груп Санкт-Петербург
от 60 000 до 200 000 ₽
Alente Красноярск
от 60 000 до 70 000 ₽
25 июл. 2021, в 11:36
500 руб./за проект
25 июл. 2021, в 11:31
3000 руб./за проект