opencv和多处理导致管道破裂

时间:2018-09-10 13:11:44

标签: python python-3.x multiprocessing

我试图使用多个过程来完成图像处理,以提高速度/效率,但是它总是给我造成断线错误。即使使用代码

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,则不会出现断线错误。有人知道为什么会发生这种情况,或者如何解决?

1 个答案:

答案 0 :(得分:0)

除了特殊分配的共享内存区域,信号量,互斥锁等之外,新进程不会与其他进程共享内存空间和系统资源的处理程序。因此,如果frame对象包含处理程序,例如PIPE对象,在新版本中它将无效/不可访问。 这就是我的理解。 根据{{​​3}},传递对象会导致通过可能相关的PIPE复制对象。

通常,我建议不要将复杂的对象传递给流程,因为它们可能会被不正确地传递。

解决方案是传递“简单”值,例如数字字符串等。 根据您的情况,您可以将文件名传递给进程,该进程将依次读取文件并对其进行处理。