Неправильный порядок отправки сообщений в группу django_channels

Всем привет. Столкнулся недавно со странным поведением отправки сообщений в группу по django_channels. У меня есть две обработки, одна из которых может занимать до 7 секунд, поэтому мне важно, чтобы сначала отправилось первое сообщение (message), а только после этого произошла вторая обработка и отправилось второе сообщение (message2). На деле же порядок вот такой:

  1. sent1
  2. sent2
  3. really sent
  4. really sent

Т.е. сначала отрабатывают оба блока кода отправки, а только потом они вместе отправляются к клиенту.

Код:

class Consumer(channels.generic.websocket.WebsocketConsumer):
    def connect(self):
        self.id = self.scope["url_route"]["kwargs"]["room_name"]

        asgiref.sync.async_to_sync(self.channel_layer.group_add)(
            self.id,
            self.channel_name,
        )
        self.accept()

    def disconnect(self, close_code):
        asgiref.sync.async_to_sync(self.channel_layer.group_discard)(
            self.id,
            self.channel_name,
        )

    def receive(self, text_data=None, bytes_data=None):
        text_data_json = json.loads(text_data)
        # ... обработка
        asgiref.sync.async_to_sync(self.channel_layer.group_send)(
            self.id,
            {
                "type": "move.handler",
                "message": "message",
            },
        )
        print("send 1")

        # ... ещё одна длинная обработка
        asgiref.sync.async_to_sync(self.channel_layer.group_send)(
            self.id,
            {
                "type": "move.handler",
                "message": "message2",
            },
        )
        print("send 2")

    def move_handler(self, event):
        print("really send")
        self.send(
            text_data=json.dumps(
                {
                    "message": event["message"]
                }
            )
        )

Помогите пожалуйста разобраться почему так происходит и как это исправить.


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