5

ファイルに Celery タスクが登録されていtasks.pyます。誰かが /run/pk に POST すると、指定されたパラメーターでタスクを実行します。このタスクは他のタスク (通常の 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
4

3 に答える 3

3

残念ながら、Djangoを使用してクライアントのブラウザにプッシュ通知を送信するのは簡単ではありません。最も簡単な実装は、クライアントがサーバーを継続的にポーリングして更新を確認することですが、これにより、サーバーが実行する必要のある作業量が大幅に増加します。さまざまなオプションのより良い説明は次のとおりです。

DjangoプッシュHTTP応答をユーザーに

Djangoを使用していない場合は、これらの通知にWebSocketを使用します。ただし、DjangoはWebSocketを使用するために構築されていません。これがなぜであるかについての良い説明と、WebSocketの使用方法に関するいくつかの提案があります。

WebSocketとpython/django(/ twined?)を使用して移動します

于 2011-11-11T17:53:05.283 に答える
0

HTML5のプッシュ通知のすべての厄介な部分を処理するプッシャーと呼ばれるサービスがあります。これらは、すべてのHTML5 Websocketのニュアンスを処理しながら、すべてのメッセージングと通知を処理するためのクライアント側とサーバーライブラリを提供します。

于 2012-07-10T16:18:08.137 に答える