Отправка сообщения с помощью Django Channels вне класса потребителя с получением RuntimeError('Event loop is closed')
Я пытаюсь отправить сообщение на фронтенд вне класса consumer в Django Channels. Я пытаюсь сделать следующее: клиент отправляет файл по http, тем самым попадая в класс view, а класс view вызывает класс consumer и отправляет обновление клиенту через websocket.
Это мое мнение
class GroupListView(BaseListView):
name = "Group list view"
model = Group
serializer = GroupSerializer
def get(self, request: Request):
if "bulk" in request.query_params and request.query_params["bulk"]:
async_to_sync(get_channel_layer().group_send)("test_lobby", {"type": "chat.message"})
return self.send_response(False, "pending", {})
Это мой потребитель
class TestConsumer(WebsocketConsumer):
def connect(self):
self.room_name = "lobby"
self.room_group_name = "test_lobby"
async_to_sync(self.channel_layer.group_add(
self.room_group_name, self.channel_name
))
self.accept()
def disconnect(self, code):
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name, self.channel_name
)
def chat_message(self, event):
# Send message to WebSocket
self.channel_layer.send(text_data=json.dumps({"message": 'hello world'}))
Я следую документации по Django Channels: https://channels.readthedocs.io/en/stable/topics/channel_layers.html#using-outside-of-consumers
Однако, я получаю эту ошибку
HTTP GET /api/v2/groups/?bulk=true 200 [0.05, 127.0.0.1:56152]
Task exception was never retrieved
future: <Task finished name='Task-28' coro=<Connection.disconnect() done, defined at /python3.9/site-packages/redis/asyncio/connection.py:819> exception=RuntimeError('Event loop is closed')>
Traceback (most recent call last):
File "/python3.9/site-packages/redis/asyncio/connection.py", line 828, in disconnect
self._writer.close() # type: ignore[union-attr]
File "/python3.9/asyncio/streams.py", line 353, in close
return self._transport.close()
File "/python3.9/asyncio/selector_events.py", line 700, in close
self._loop.call_soon(self._call_connection_lost, None)
File "/python3.9/asyncio/base_events.py", line 746, in call_soon
self._check_closed()
File "/python3.9/asyncio/base_events.py", line 510, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed