我试图让图像处理使用多个进程,以提高速度/效率,但它总是给我一个坏管道错误。即使有代码
import cv2
import numpy as np
from multiprocessing import Process, freeze_support
def findRed(img, pipe):
x = 5
frame = cv2.imread("test.jpg")
test = Process(target=findRed, args=(frame, 5))
test.start()
test.join()如果我将框架设置为不使用imread的值,它不会给我坏掉的管道错误。有谁知道为什么会发生这种事,或者怎么解决?
发布于 2018-09-10 13:27:47
除了特殊分配的共享内存区域、信号量、互斥量等外,新进程不与其他进程共享内存空间和系统资源。因此,如果frame对象包括处理程序,就像管道对象一样,它在新的进程中是无效的/不可访问的。我就是这么理解的。根据Python multiprocessing, passing an object reference containig a semaphore,传递一个对象会导致对象通过管道进行复制,这可能是相关的。
一般来说,我建议不要将复杂的对象传递到过程中,它们可能被不正确地传递。
解决方案是传递“简单”值,如数字、字符串等。在您的示例中,您可以将一个文件名传递给进程,该进程将读取一个文件并处理它本身。
https://stackoverflow.com/questions/52258596
复制相似问题