Как передать сообщение в aiohttp websocket server из другой корутины

Мне нужно сделать веб интерфейс состояния устройства. Есть программа, которая отправляет json с состояниями. AioHTTP принимает его. И как то нужно передать в ws_handler для отображения в браузере. Делаю на вебсокетах. Попробовал сделать глобальный QUEUE, но PyCharm ругается, говорит не видит его. Вот код views.py

from aiohttp import web
from WebInterfaceServer import QUEUE
import aiohttp_jinja2
import aiohttp
import asyncio
import json


async def index(request):
    return aiohttp_jinja2.render_template('index.html', request, {})


async def ws_handle(request, queue):
    ws = web.WebSocketResponse()
    available = ws.can_prepare(request)
    if not available:
        return aiohttp_jinja2.render_template('index.html', request, {})
    await ws.prepare(request)

    asyncio.create_task(ws_communication(ws))

    async for msg in ws:
        # ws.__next__() automatically terminates the loop
        # after ws.close() or ws.exception() is called
        if msg.type == aiohttp.WSMsgType.TEXT:
            if msg.data == 'close':
                await ws.close()
            else:
                await ws.send_str(msg.data + '/answer')
        elif msg.type == aiohttp.WSMsgType.ERROR:
            print('ws connection closed with exception %s' %
                  ws.exception())

    print('websocket connection closed')

    return ws


async def ws_communication(ws):
    global QUEUE
    while True:
        msg = QUEUE.get()
        await ws.send_str(json.dumps(msg))

Может то знает как можно без глобальной переменной передать?


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