Неправильный порядок отправки сообщений в группу django_channels
Всем привет. Столкнулся недавно со странным поведением отправки сообщений в группу по django_channels. У меня есть две обработки, одна из которых может занимать до 7 секунд, поэтому мне важно, чтобы сначала отправилось первое сообщение (message), а только после этого произошла вторая обработка и отправилось второе сообщение (message2). На деле же порядок вот такой:
- sent1
- sent2
- really sent
- 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"]
}
)
)
Помогите пожалуйста разобраться почему так происходит и как это исправить.