Django&动态页面芹菜

时间:2011-11-11 15:32:27

标签: python html django dynamic django-celery

我在tasks.py文件中注册了Celery任务。有人POST到/ run / pk我用给定的参数运行任务。此任务还执行其他任务(普通的Python函数),并且我想在子任务完成其工作时更新我的​​页面(在/ run / pk返回的HttpResponse)。

这是我的任务:

from celery.decorators import task


@task
def run(project, branch=None):
    if branch is None:
        branch = project.branch
    print 'Creating the virtualenv'
    create_virtualenv(project, branch)
    print 'Virtualenv created' ##### Here I want to send a signal or something to update my page
    runner = runner(project, branch)
    print 'Using {0}'.format(runner)
    try:
        result, output = runner.run()
    except Exception as e:
        print 'Error: {0}'.format(e)
        return False
    print 'Finished'
    run = Run(project=project, branch=branch,
                       output=output, **result._asdict())
    run.save()
    return True

3 个答案:

答案 0 :(得分:3)

不幸的是,使用Django向客户端的浏览器发送推送通知并不容易。最简单的实现是让客户端不断轮询服务器以获取更新,但这会增加服务器必须完成的工作量。以下是对不同选项的更好解释:

Django Push HTTP Response to users

如果您不使用Django,则可以使用websockets进行这些通知。但是,Django不是为使用websockets而构建的。以下是对此原因的一个很好的解释,以及如何使用websockets的一些建议:

Making moves w/ websockets and python / django ( / twisted? )

答案 1 :(得分:1)

自问这个问题以来已经过去很多年了,Channels是你现在可以用Django实现这一目标的方法。

然后,Channels网站将自己描述为一个“项目,使Django能够处理的不仅仅是普通的HTTP请求,包括WebSockets和HTTP2,以及在发送响应之后运行代码的能力。缩略图或背景计算。“

答案 2 :(得分:0)

有一项名为Pusher的服务将处理HTML5中推送通知的所有混乱部分。它们提供客户端和服务器库来处理所有消息和通知,同时处理所有HTML5 Websocket的细微差别。