Как обработчики запросов могут общаться в Django? - PullRequest
1 голос
/ 20 апреля 2010

Если вы делаете длительный http-запрос к приложению Django, можете ли вы отправить второй запрос для связи с ним? Можете ли вы делиться данными между запросами?

Pylons имеет концепцию глобальных применений. Переменные верхнего уровня в node.js - это глобальные переменные приложения. Как я могу сделать это в Django?

1 Ответ

3 голосов
/ 20 апреля 2010

Обычно это считается плохой идеей, поэтому я собираюсь показать вам, как это обычно делается. В большинстве случаев длительные задачи следует переносить в фоновый режим, а обновления этой задачи помещаются в глобальное хранилище (например, в вашу базу данных memcached или подобное). Это удерживает ваш интерфейсный сервер от слишком большого количества запросов.

Используя memcached (или любой из бэкэндов django-кэша ), ваш код может выглядеть примерно так:

def long_running_task(number):
    cache.set("long_running_task_progress", 0, 60*60) # Store for 1 hour.
    for x in range(0, number):
        huge_calculation(number)
        cache.set("long_running_task_progress", (x / number), 60*60)
    cache.delete("long_running_task_progress")

def check_long_task(request):
    percent = cache.get("long_running_task_progress")
    if percent is None:
        return HttpResponse("There is no task running!")
    else:
        return HttpResponse("The task is %.2f percent complete." % (percent * 100))

Просто загрузите последний в AJAX-таймер и вставьте его на страницу при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...