gpt4 book ai didi

Django 在请求之间共享 unpicklable 对象

转载 作者:行者123 更新时间:2023-12-01 11:47:08 26 4
gpt4 key购买 nike

我目前正在开发一个 Django 项目,希望通过网络对视频文件进行一些转换。为了对视频进行转换,我使用了 opencv 的 python API,我还使用 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 对象不可 picklable,这意味着它不能缓存或保存到 session 对象。

我能做些什么来让它在请求之间持久化吗?

注意:我考虑过使用 APE 或 Orbit 等 HTTP 推送方法,但由于这只是一个调查项目,因此对性能没有真正的担忧。

最佳答案

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

在文件级别使“检测器”成为全局变量。

detector = None

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

关于Django 在请求之间共享 unpicklable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com