Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Django频道从芹菜后台任务向浏览器发送消息_Django_Django Channels - Fatal编程技术网

使用Django频道从芹菜后台任务向浏览器发送消息

使用Django频道从芹菜后台任务向浏览器发送消息,django,django-channels,Django,Django Channels,我有一项长时间的工作,就是吃芹菜。完成后,我想向浏览器发送一条消息,指示它刷新页面。为此,我想使用通道V2 文档中不清楚如何实现这一点 这是我的后台任务中的内容,但我不确定如何设置消费者 @shared_task def my_task(): time.sleep(5) Channel('my-background-task').send({"refresh": True}) 然后,当芹菜任务完成后,您会向相关组发送重新加载页面消息 @shared_task def my_ta

我有一项长时间的工作,就是吃芹菜。完成后,我想向浏览器发送一条消息,指示它刷新页面。为此,我想使用通道V2

文档中不清楚如何实现这一点

这是我的后台任务中的内容,但我不确定如何设置消费者

@shared_task
def my_task():
    time.sleep(5)
    Channel('my-background-task').send({"refresh": True})
然后,当芹菜任务完成后,您会向相关组发送重新加载页面消息

@shared_task
def my_task():
    ... do your task ...
    group_name = get_user_name()  # Find out way to get same as what is printed on connect()

    channel_layer = get_channel_layer()
    # Trigger reload message sent to group
    async_to_sync(channel_layer.group_send)(
        group_name,
        {'type': 'reload_page'}
    )
当用户启动芹菜任务时,您可以成功地为用户创建一个组,然后在完成任务时向用户组发送一条消息,只需添加以下脚本即可:

webSocket.onmessage = function() {
    window.location.reload();
}

我使用与装饰程序“app.task”相同的解决方案时遇到了相同的问题。我将decorator改为“shared_task”,现在一切都正常了。如果其他人有这个问题,这对我不起作用。“异步到同步”部分似乎没有任何效果。我正在使用Django 2.2.8、芹菜4.4.1和Channel 2.4。0@unicorn您的消费者中是否有一种称为“重新加载”页面的方法?如果是这样的话,请在那里打印出来,看看它是否正在启动。@bdoubleu“async\u to\u sync”部分对我也不起作用。它是从控制台工作,而不是从芹菜任务到消费者。有什么建议吗?
webSocket.onmessage = function() {
    window.location.reload();
}