From 82d1110c68b0acc504b4f2996ac0834a33b92c3c Mon Sep 17 00:00:00 2001 From: Forden Date: Sat, 15 Aug 2020 15:41:39 +0300 Subject: [PATCH] feat: added aiojobs return webhook to Telegram faster --- bot.py | 3 +++ requirements.txt | 5 +++-- web_handlers/tg_updates.py | 16 +++++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/bot.py b/bot.py index 5d216ea..7f0577a 100644 --- a/bot.py +++ b/bot.py @@ -1,5 +1,6 @@ from typing import List +import aiojobs as aiojobs from aiogram import Bot, Dispatcher from aiogram.contrib.fsm_storage.redis import RedisStorage2 from aiogram.types import ParseMode @@ -31,6 +32,7 @@ async def init() -> web.Application: from utils.misc import logging import web_handlers logging.setup() + scheduler = await aiojobs.create_scheduler() app = web.Application() subapps: List[str, web.Application] = [ ('/health/', web_handlers.health_app), @@ -39,6 +41,7 @@ async def init() -> web.Application: for prefix, subapp in subapps: subapp['bot'] = bot subapp['dp'] = dp + subapp['scheduler'] = scheduler app.add_subapp(prefix, subapp) app.on_startup.append(on_startup) app.on_shutdown.append(on_shutdown) diff --git a/requirements.txt b/requirements.txt index aed7b7c..15d9eaa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ -aiomysql==0.0.20 aiogram==2.9.2 aiohttp==3.6.2 +aiomysql==0.0.20 +aiohttp_healthcheck==1.3.1 aioredis==1.3.1 loguru==0.5.1 -aiohttp_healthcheck==1.3.1 \ No newline at end of file +aiojobs==0.2.2 diff --git a/web_handlers/tg_updates.py b/web_handlers/tg_updates.py index d072883..c2e0c7c 100644 --- a/web_handlers/tg_updates.py +++ b/web_handlers/tg_updates.py @@ -1,21 +1,19 @@ from aiogram import Bot, Dispatcher, types from aiohttp import web -from loguru import logger - tg_updates_app = web.Application() -async def execute(req: web.Request) -> web.Response: +async def proceed_update(req: web.Request): upds = [types.Update(**(await req.json()))] Bot.set_current(req.app['bot']) Dispatcher.set_current(req.app['dp']) - try: - await req.app['dp'].process_updates(upds) - except Exception as e: - logger.error(e) - finally: - return web.Response() + await req.app['dp'].process_updates(upds) + + +async def execute(req: web.Request) -> web.Response: + await req.app['scheduler'].spawn(proceed_update(req)) + return web.Response() tg_updates_app.add_routes([web.post('/{token}', execute)])