Django делится необрабатываемыми объектами между запросами - PullRequest
3 голосов
/ 18 ноября 2011

В настоящее время я работаю над проектом Django, который, я надеюсь, внесет некоторые преобразования в видеофайлы через Интернет. Чтобы преобразовать видео, я использую Python API opencv и также использую Dajax для выполнения ajax-запросов.

В файле запросов AJAX у меня есть следующий код:

    @dajaxice_register
    def transform_and_show(request, filename, folder, frame_count, img_number):
        detector = Detector(filename) //Object which uses opencv API
        dajax = Dajax()
        generated_file = detector.detect_people_by_frame(folder, str(img_number))
        dajax.assign('#video', 'src', '/media/generated'+folder+generated_file)
        return dajax.json()

Идея состоит в том, чтобы преобразовывать видео кадр за кадром и отображать каждый преобразованный кадр в браузере в теге img, давая пользователю ощущение, что он / она просматривает преобразованное видео, поэтому этот метод вызывается в цикле javascript. .

Проблема в том, что в этом подходе объект «детектор» повторно инициализируется на каждой итерации, поэтому он генерирует только изображение, соответствующее первому кадру видео. Моя идея состояла в том, чтобы обойти эту проблему, сделав «детектор» постоянным между запросами, чтобы указатель на следующий кадр видео не устанавливался в 0 при каждом запросе. Проблема заключается в том, что объект Dectector не может быть выбран, что означает, что он не может быть кэширован или сохранен в объекте сеанса.

Могу ли я сделать что-то постоянное между запросами?

ПРИМЕЧАНИЕ. Я рассмотрел использование подходов HTTP push, таких как APE или Orbit, но, поскольку это всего лишь исследовательский проект, реальной производительности не беспокоит.

1 Ответ

0 голосов
/ 03 февраля 2012

Вы пытались использовать переменную уровня модуля для хранения объекта?

Сделать «детектор» глобальным на уровне файлов.

detector = None

def transform():
    global detector
    if detector is None:
        detector = Detector(filename)
    file = detector.detect(....)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...