@tem12qaz

Как запустить aiogram с помощью gunicorn?

Я только начал разбираться с gunicorn, так что прошу не судить за неграмотность.

Мне понадобилось запустить aiogram бота через webhook. Без gunicorn он нормально работал (через ngnix), но я прочитал что gunicorn нужен и решил пробовать с ним.

Проблема состоит в том, что gunicorn (как я понимаю) принимает в качестве аргументов программу и функцию из этой программы, которая возвращает веб-приложение (в моем случае aiohttp). Aiogram же, при выполнении функции start_webhook() не возвращает приложение, а сразу запускает его.

Если изменить start_webhook() функцию так, чтобы она возвращала приложение aiohttp, а не запускала его, и запустить через gunicorn: gunicorn main:get_web_app --bind localhost:8001 --worker-class aiohttp.GunicornWebWorker
происходит ошибка: RuntimeError: This event loop is already running in python

Каким образом можно запустить бота через gunicorn? Возможно для телеграм бота он не нужен?
  • Вопрос задан
  • 1032 просмотра
Пригласить эксперта
Ответы на вопрос 1
Zverik
@Zverik
Специалист по OpenStreetMap
Всё так, aiogram при вызове set_webhook не ожидает, что loop уже будет запущен. Поэтому я тупо выдрал соответствующие куски кода из aiogram.utils.executor:

async def async_app():
    app = make_app()
    executor = Executor(dp, skip_updates=True)
    executor.on_startup(on_startup)
    executor.on_shutdown(on_shutdown)
    executor._prepare_webhook(config.WEBHOOK_PATH, app=app)
    await executor._startup_webhook()
    return app
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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