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

Если просто использовать два .run(), то ничего не выйдет, так как дальнейшее выполнение программы после использования любой из них не идет. Как это исправить?


Ответы (1 шт):

Автор решения: Tolomika

Ты можешь через 1 сервер запусить два своих модуля. Сделай 2 метода, один, что инициализирует flask def create_fapp(name): app = Flask(name) и второй с твоим ботом(хз что за либу ты используешь). Создай метод start, в который передашь свои методы по созданию приложений и через uvicorn или guvicorn запустишь приложения через метод. Запусти этот метод uvicorn.run(app.main:start)

Это самый простой способ, если нагрузка на сервер небольшая и тебе не нужно маштабироваться.

Оно может выглядеть примерно вот так:

import uvicorn
from discord.ext import commands
import asyncio

from your_flask_app import app
from your_discord_bot import bot

async def start_flask_app():
    uvicorn.run(app, host="0.0.0.0", port=5000)

async def start_discord_bot():
    await bot.start("token")

async def main():
    tasks = [start_flask_app(), start_discord_bot()]
    await asyncio.gather(*tasks)

if __name__ == "__main__":
    asyncio.run(main())
→ Ссылка