小编Cha*_*och的帖子

从 Celery 任务向 Channels 发送消息

Django 2.1.1、Django 频道 2.1.3、芹菜 4.2.1

我已经在 Celery 中设置了一个任务,在任务结束时,我需要向客户端发送一个 websocket 消息。但是,永远不会发送 websocket 消息。没有抛出任何错误,它只是不发送。

我已经设置了一个使用 Redis 作为后端的通道层。从普通的 Django 视图执行此操作可以正常工作。但是当在 Celery 任务中运行时,它会将消息发送到 Channels,我可以看到 Channels 确实运行了下面我的consumers.py 代码中显示的代码,但客户端从未收到 websocket 消息。

任务.py

def import_job(self):
    # (do task calculations, store in data dict)
    message = {'type': 'send_my_data',
               'data': json.dumps(thecalcs) }
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)('core-data', message)
Run Code Online (Sandbox Code Playgroud)

消费者.py

class AsyncDataConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.channel_group_name = 'core-data'

        # Join the group
        await self.channel_layer.group_add(
            self.channel_group_name,
            self.channel_name
        )
        await self.accept()

    async def disconnect(self, close_code):
        # Leave the group
        await self.channel_layer.group_discard(
            self.channel_group_name,
            self.channel_name …
Run Code Online (Sandbox Code Playgroud)

django celery celerybeat django-channels

7
推荐指数
1
解决办法
2905
查看次数

标签 统计

celery ×1

celerybeat ×1

django ×1

django-channels ×1