import asyncio

from aiohttp import web

async def root_handler(request):
    return web.Response(text="root")


async def long_polling_1(request):
    q = request.app['q']
    try:
        data = await asyncio.wait_for(q.get(), 15.0)
        text = f"recieved data: {data}"
    except asyncio.TimeoutError:
        text = f"timeout! no data"
    return web.Response(text=text)

async def handler_msg(request):
    q = request.app['q']
    msg = request.match_info['msg']
    q.put_nowait(f" === message: {msg} ======")
    return web.Response(text=f"message {msg} sent to queue")

if __name__ == '__main__':
    app = web.Application()
    app.add_routes([
        web.get('/', root_handler),
        web.get('/long_polling/', long_polling_1),
        web.get('/msg/{msg}/', handler_msg),
        ])
    app['q'] = asyncio.Queue()
    web.run_app(app, port=8040)
