Как передать сообщение в 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))
Может то знает как можно без глобальной переменной передать?