我有一个包含两种方法的图像处理服务,我想使用 Python 中的多处理库并行执行这些方法。
第一种方法执行 api 调用,以便从外部服务获取图像元数据。
第二种方法使用执行某些复杂操作的类的对象,例如使用 opencv 库读取图像以及使用 sklearn 模型执行图像分类活动
第一个函数看起来像这样(如下图)-->
def function_1():
##perform long running api call
这是我的第二个功能-->
def function_2(image_proc_obj):
predictions = image_proc_obj.predict()
在使用multiprocessing.Process调用这两个方法时,如下所示
image_proc_obj = ImageProcessingClass()
p1 = multiprocessing.Process(target=function_1)
p2 = multiprocessing.Process(target=function_2, args=(image_proc_obj,))
我收到一个ValueError:不能腌制包含指针的 ctypes 对象
我在第二个函数中传递了image_proc_obj,因为这个类的构造函数调用加载了模型文件,我不想在每个函数调用中都发生这种情况。
我还尝试通过子类化 multiprocess.Process 以这种方式创建一个类
class ImageClassifier(multiprocess.Process):
def __init__(self, process_obj):
super(ImageClassifier,self).__init__()
self.proc_obj = process_obj
def run(self, image):
predictions = self.proc_obj.predict(image)
但是在运行命令时,如下所示:
image_proc_obj = ImageProcessingClass()
classifier = ImageClassifier(name="classifier process", process_obj=image_proc_obj)
classifier.start()
classifier.join()
我得到同样的错误——> ValueError: ctypes objects contains pointers cannot be pickle
期待对此有所帮助