Динамические страницы с Django & Celery - PullRequest
4 голосов
/ 11 ноября 2011

В моем файле tasks.py зарегистрировано задание Celery. Когда кто-то POST в / run / pk, я запускаю задачу с заданными параметрами. Эта задача также выполняет другие задачи (обычные функции Python), и я хотел бы обновлять свою страницу (HttpResponse, возвращенный в / run / pk) всякий раз, когда подзадача заканчивает свою работу.

Вот моя задача:

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 ]

3 голосов
/ 11 ноября 2011

Отправка push-уведомлений в браузер клиента с использованием Django, к сожалению, непроста.Простейшая реализация состоит в том, чтобы клиент постоянно опрашивал сервер на наличие обновлений, но это значительно увеличивает объем работы, выполняемой вашим сервером.Вот лучшее объяснение ваших различных вариантов:

HTTP-ответ Django Push для пользователей

Если вы не используете Django, вы будете использовать веб-сокеты для этих уведомлений.Однако Django не создан для использования веб-сокетов.Вот хорошее объяснение, почему это так, и несколько советов о том, как использовать websockets:

Создание ходов с websockets и python / django (/ twisted?)

1 голос
/ 09 июля 2017

Прошло много лет с тех пор, как этот вопрос был задан, Каналы - это способ, которым вы теперь можете достичь этого, используя Django.

Тогда сайт Channels описывает себя как "проект длясделать Django способным обрабатывать не только простые HTTP-запросы, включая WebSockets и HTTP2, а также возможность запускать код после отправки ответа для таких вещей, как миниатюры или фоновые вычисления. "

0 голосов
/ 10 июля 2012

Существует служба под названием Pusher , которая позаботится обо всех беспорядочных частях Push-уведомлений в HTML5.Они предоставляют клиентскую и серверную библиотеку для обработки всех сообщений и уведомлений, а также позаботятся обо всех нюансах веб-сокета HTML5.

...