Отправка сообщения с помощью 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

Вернуться на верх