如何同时启动aiogram v3轮询Bot与aiohttp Web服务器
问题描述
我有一个运行在轮询模式下的aiogram v3 Bot,需要添加处理器来处理外部应用的请求,我使用aiohttp服务器监听外部请求,处理后向Bot用户发送通知:
import asyncio from aiogram import Bot, Dispatcher from aiohttp import web app = web.Application() async def bot_start(): bot = Bot(TOKEN, parse_mode='HTML') dp = Dispatcher() await dp.start_polling(bot) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.create_task(bot_start()) loop.run_until_complete(web.run_app(app, host="127.0.0.1", port=5555))
目前Bot可以启动轮询,但Web服务器无法运行,需要在单个项目中同时启动这两个进程。
注:Bot必须运行在轮询模式,而非Webhook。
解决方案
将两个应用作为异步函数在独立任务中运行:
async def bot_start(): bot = Bot(TOKEN, parse_mode='HTML') dp = Dispatcher() await dp.start_polling(bot) async def webserver_start(): app = web.Application() runner = web.AppRunner(app) await runner.setup() site = web.TCPSite(runner, "127.0.0.1", 5555) await site.start() if __name__ == '__main__': loop = asyncio.get_event_loop() task1 = loop.create_task(bot_start()) task2 = loop.create_task(webserver_start()) loop.run_until_complete(asyncio.gather(task1, task2))
内容的提问来源于stack exchange,提问作者swserg
相关产品推荐
相关产品推荐

