关于python:使用Celery Tasks.py使用Django通道向客户端发送消息

sending message to client using Django Channels from Celery tasks.py

我试图使用在Django通道(v2.1.7)来从服务器发送消息给客户端。当我执行下面的任务芹菜,我的信息是不是被在consumers.py(因此不被发送到客户端)取出,并令人惊奇地没有错误occures。

我能够从消费者直接发送消息给客户端。但我不能设法使用async_to_sync从消费者的外送()。

(I试图在标准的django views.py使用async_to_sync方法和我有同样的问题)

wololo / tasks.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@app.task(name='wololo.tasks.upgrade_building')
def upgrade_building(user_id):


    os.environ['DJANGO_SETTINGS_MODULE'] = 'DjangoFirebaseProject.settings'

    from channels.layers import get_channel_layer
    channel_layer = get_channel_layer()
    print(channel_layer,"wololo")

    async_to_sync(channel_layer.send)('chat', {
        'type': 'hello.message',
        'message': 'hadiInsss',
    })

    return True

wololo / consumers.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from channels.generic.websocket import WebsocketConsumer
import json
from asgiref.sync import async_to_sync

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

    def disconnect(self, close_code):
        async_to_sync(self.channel_layer.group_discard)("chat", self.channel_name)

    def hello_message(self, event):
        print("U MUST SEE THAT MSG")
        # Send a message down to the client
        self.send(text_data=json.dumps(event['message']))

的结果,我已芹菜终端
点击查看芹菜终端

预先感谢


看起来你正在使用的channel_layer.send方法,但是我觉得你真的想使用channel_layer.group_send代替。