Как запустить веб-приложение на Flask и использовать aiogram одновременно?

Как можно обеспечить одновременную работу бота и сайта в файле runner.py, чтобы выполнялась только одна из строк кода в зависимости от комментариев?
  • 31 октября 2023 г. 16:48
Ответы на вопрос 2
Для запуска веб-приложения на Flask и использования aiogram одновременно, вы можете использовать многопоточность или асинхронность. 

Приведу пример использования асинхронности с помощью библиотеки asyncio.

Первым делом, вам потребуется установить aiogram и Flask:

```
pip install aiogram flask
```

Затем вы можете создать файл `runner.py` и использовать следующий код:

```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Command
from flask import Flask
from aiogram.dispatcher import Dispatcher, FSMContext
from aiogram.dispatcher.webhook import WebhookRequestHandler
import asyncio

# Инициализация Flask
app = Flask(__name__)

# Инициализация aiogram
TOKEN = 'your_token'
bot = Bot(token=TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())

# Обработчик команды /start
@dp.message_handler(Command('start'))
async def start(message: types.Message, state: FSMContext):
    await message.answer("Привет! Это твой первый бот на Flask и aiogram.")

# Функция для запуска aiogram
async def start_aiogram():
    await dp.start_polling()

# Функция для запуска Flask
def start_flask():
    app.run()

# Запуск асинхронных функций
asyncio.create_task(start_aiogram())
start_flask()
```

В этом примере Flask запускается с помощью обычной функции `start_flask()`, а aiogram с помощью асинхронной функции `start_aiogram()`. Используя `asyncio.create_task()`, мы можем запустить асинхронную функцию без блокировки выполнения кода.

В результате, вы сможете запустить оба веб-приложения `aiogram` и `Flask` одновременно.
В данном случае, выполнение кода будет блокироваться на любой из этих строк. Рекомендуется запустить Flask в отдельном процессе или потоке.
Похожие вопросы