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