Отправка сообщения по каналам Django застревает в цикле for

Я вычисляю прогресс задачи с помощью цикла for и пытаюсь отправить вычисленное значение через сокеты с помощью async_to_sync, но процесс застревает и ничего не происходит. Я сталкиваюсь с этой проблемой только в цикле, но вне цикла я могу отправить сообщение.

файл consumers.py

import asyncio
from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync
import json
import time

class ProgressConsumer(WebsocketConsumer):
    def connect(self):
        self.room_name = "test_consumer"
        self.room_group_name = "test_consumer_group"
        async_to_sync(self.channel_layer.group_add)(
            self.room_group_name, self.channel_name
        )
        self.accept()
        self.send(text_data=json.dumps({'status' : 'connected'}))

    def receive(self, text_data):
        print(text_data)
        for i in range(10):
            time.sleep(1)
            msg_dict = {
                "msg" : "msg "+str(i)+" sent from loop"
            }
            self.send(text_data=json.dumps(msg_dict))

    def disconnect(self, *args, **kwargs):
        self.room_name = "test_consumer"
        self.room_group_name = "test_consumer_group"
        async_to_sync(self.channel_layer.group_discard)(
            self.room_group_name,
            self.channel_name
        )
        print("disconnected")

    def send_progress(self, event):
        print("send progress")
        data = json.loads(event.get('value'))
        print("data :", data)
        self.send(text_data=json.dumps({"payload" : data}))
        print('send progress')

Цикл, в котором я вызываю функцию send progress

    for line in loglines:
        cur_frame = int(line)
        prog = calulate_progress(int(n_frames),cur_frame)
        print("Progress is : "+str(prog)+"%")

        data = {"progress from loop" : prog}
        channel_layer = get_channel_layer()

        prog = prog
        async_to_sync(channel_layer.group_send)(
            "test_consumer_group", {
                "type": "send_progress",
                "value": json.dumps(data)
            }
        )

        if prog == 100.0:
            break
Вернуться на верх