Каналы Django - невозможно подписаться на группы

Я пытаюсь отправить consumers.py информацию для отображения на клиентской стороне вне consumers.py.

Я обратился к Send message using Django Channels from outside Consumer class в предыдущем вопросе, но подпроцесс .group_send или .group_add, кажется, не существует, поэтому я чувствую, что, возможно, я упускаю что-то очень простое.

Consumers.py

from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync

class WSConsumer(WebsocketConsumer):
    def connect(self):
        async_to_sync(self.channel_layer.group_add)("appDel", self.channel_name)
        self.accept()

        self.render()

appAlarm.py

def appFunc(csvUpload):
    #csvUpload=pd.read_csv(request.FILES['filename'])
    csvFile = pd.DataFrame(csvUpload)
    colUsernames = csvFile.usernames
    print(colUsernames)

    channel_layer = get_channel_layer()

    for user in colUsernames:
        req = r.get('https://reqres.in/api/users/2')
        print(req)
        t = req.json()
        data = t['data']['email']
        print(user + " " + data)
        
        message = user + " " + data
        async_to_sync(channel_layer.group_send)(
        'appDel',
        {'type': 'render', 'message': message}
    )

Выдаёт эту ошибку:

    async_to_sync(channel_layer.group_send)(
AttributeError: 'NoneType' object has no attribute 'group_send'

и выдаст ту же ошибку для group_add, когда вычистите его больше, чтобы понять, что происходит, но согласно документации ЗДЕСЬ я чувствую, что это должно работать.

Для всех, кто рассматривает этот вопрос в будущем, я не смог использовать redis или даже memurai в Windows OS из-за стоимости. В итоге я использовал события на стороне сервера (SSE), а именно django-eventstream, и пока что это работает отлично, так как мне не нужно, чтобы клиент взаимодействовал с сервером, для приложения чата это бы не подошло.

Eventstream создает конечную точку на /events/, к которой клиент может подключиться и получить потоковый http-ответ.

Отправка данных из externalFunc.py:

send_event('test', 'message', {'text': 'Hello World'})

Слушатель события в HTML-странице:

var es = new ReconnectingEventSource('/events/');

es.addEventListener('message', function (e) {
    console.log(e.data);

    var source = new EventSource("/events/")

    var para = document.createElement("P");
    const obj = JSON.parse(event.data)
    para.innerText = obj.text;
    document.body.appendChild(para)

}, false);

es.addEventListener('stream-reset', function (e) {
}, false);
Вернуться на верх