2011-11-18 26 views
3

我目前正在研究一个Django项目,希望通过网络对videofiles进行一些转换。为了对视频进行转换,我使用了opencv的python API,并且我还正在使用Dajax来执行ajax请求。Django在请求之间共享不可取消的对象

在AJAX请求文件I有以下代码:

@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推送方法,如APE或Orbit,但由于这只是一个调查项目,所以对性能没有真正的关注。

+0

有人回答了你? – sureshvv

+0

不,你是第一个 –

回答

0

您是否尝试过模块级变量来存储对象?

使“检测器”成为文件级别的全局。

detector = None 

def transform(): 
    global detector 
    if detector is None: 
     detector = Detector(filename) 
    file = detector.detect(....) 
+0

不,这是关于什么? –

+0

使“djax”成为文件级别的全局。 – sureshvv