使用Django频道从芹菜后台任务向浏览器发送消息
我有一项长时间的工作,就是吃芹菜。完成后,我想向浏览器发送一条消息,指示它刷新页面。为此,我想使用通道V2 文档中不清楚如何实现这一点 这是我的后台任务中的内容,但我不确定如何设置消费者使用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
@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();
}