Closed ml-ruan closed 2 months ago
你这个传参明显是错的啊, 类方法传参第一个入参cls应该是 类型本身, 实例方法传参的第一个入参是类的实例。 你push DatectFlaw类型的对象肯定是错的。 你要直接传这个类,而不是类的对象
要懂 类方法和实例方法的第一个入参cls和self的实质。 前者是类本身,后者是该类型的对象
你自己想想,对于类方法,你平时咋调用的。类方法和静态方法都是 A.func(1,2) 这样吧。 实例方法是 A(1).funb(1,2) 这样吧。 类方法并不需要使用对象才能调用,类方法中不能访问self的属性,你使用对象.类方法和类的类方法是一样的,如果你一定要访问对象的属性,那应该定义成实例方法。 这应该是面向对象的本质和基础知识。
我有点好奇你这类的定义,你实例化这个DetectFlaw类时候传了参数“EL” 和 detect_list,应该是init中接受了处理成了相关的实例属性, 但你的run中如果与 DetectFlaw的 “EL” 和 detect_list 传的参数有关系,那么怎么会声明成类方法,我对你的DetectFlaw类定义相当好奇
我的run函数在执行之前,需要根据传入参数对类进行初始化,初始化时读取配置文件中的内容,再根据初始化后类的实例属性,对图片进行处理
是我理解出错误类方法与实例方法,十分感谢
Traceback (most recent call last):
File "elboost.py", line 46, in
使用了实例方法后,还是会提示类无法通过Json序列化,是因为只支持使用实例属性,而不支持其它实例方法吗?
不是,你没看文档吧,文档说的很清楚,@boost的函数的入参,必须是简单类型,不能是自定义类型。也就是消费函数入参必须是 数字 字符串 列表 字典这些的,你函数入参是 包括 ndarray 就是不行
def fun(a,b) ,其中的a b不可以是 python中的自定义类型,懂了吗。 就是不能把自定义类A和A的 A(1),B(1)对象 作为函数的入参,懂了吗。
你懂我说的什么是基本类型和自定义类型不? 你能 json.dumps python的自定义类型返回给接口和前端吗?
你直接把这个例子复制运行不行吗,这个例子不是包括了 实例方法 类方法 静态方法 和普通函数四种情况了吗。
我说的是你函数入参不能是自定义类型,懂了不,就是自定义类型不能作为消费函数的入参
懂了懂了,我以为nadarry格式的图片也是简单类型了。
nadarry肯定不是基本类型,list是是基本类型,不能被json,dumps的都不是基本类型
你这个很容易改造啊,你run传参 img_path 图片路径字符串不行吗,不要传img对象
你这里传img的路径不是香多了吗,你传一个img对象,就算funboost能支持自定义类型,你想下消息队列要存多大的空间,浪费流量和消息队列内存
是的,谢谢,我这边后面使用这个部署到服务器上,后面考虑把图片转成base64字符串格式使用,目前在看怎么解决多个CUDA调用子进程的问题
你这个问题我知道很容易解决。设置多进程模式为spawn就好了,很简单经典的问题
好的,多谢,大佬能不能再请教一下,现在我使用框架将Yolo模型加载到GPU上进行检测,但是每次都开进程重加载一遍模型耗时太长了,有没有办法加载一遍模型后重复使用
那看你用的什么python版本,搜索一下多进程内存共享。