Задать вопрос
@Tyoma_MINOR

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

Я написал платформу, при которой можно создавать команды как для ВК-бота, так и для ТГ-бота.
Но тут возникла проблема: я не могу одновременно запустить и ТГ-бота, и ВК-бота. Как я могу это сделать?

tg.executor.start_polling(tg_dp, skip_updates=True)
vk_bot.run_forever()
  • Вопрос задан
  • 123 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Простого способа нет.
Если оба бота написаны на базе asyncio, то скорее всего их метод run_forever() или эквивалент сводится к вызову asyncio.run(корутина_тело_бота()). Тогда можно будет свести запуск бота к тайой конструкции
async def main():
    await asyncio.gather(
        корутина_тело_бота1(),
        корутина_тело_бота2()
    )

if __name__ == '__main__':
    asyncio.run(main())

Программа завершится, когда завершатся оба бота.
Но чтобы добраться до "настоящего" тела бота, нужно как минимум зарыться в документацию, а то и почитать исходники библиотеки, в частности, исходники run_forever() (или его аналога).
Не получится просто взять и написать
async def bot1():
    bot1.run_forever()

Чудес не бывает.

Есть вариант запустить ботов в разных потоках, и это единственный вариант, если хотя бы один из ботов не асинхронный. Но я бы не советовал. Многопоточные программы имеют целую кучу своих специфических багов, которые могут проявляться не при каждом запуске. Они очень неприятны в отладке.
А уж мешать многопоточность с асинхронностью... тут нужно очень хорошо понимать, как это всё работает.
Ответ написан
Комментировать
Каждый бот запускается отдельно в своем процессе. В ботах добавляется логика управления, когда бот слушает какие-то сообщения, например, через Redis или может быть еще RabbitMQ (не уверен, пока с ним не работал)
или же в боты добавляется функционал API. Тогда ими можно управлять через HTTP запросы
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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