我试图使用多个过程来完成图像处理,以提高速度/效率,但是它总是给我造成断线错误。即使使用代码
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,则不会出现断线错误。有人知道为什么会发生这种情况,或者如何解决?
答案 0 :(得分:0)
除了特殊分配的共享内存区域,信号量,互斥锁等之外,新进程不会与其他进程共享内存空间和系统资源的处理程序。因此,如果frame
对象包含处理程序,例如PIPE对象,在新版本中它将无效/不可访问。
这就是我的理解。
根据{{3}},传递对象会导致通过可能相关的PIPE复制对象。
通常,我建议不要将复杂的对象传递给流程,因为它们可能会被不正确地传递。
解决方案是传递“简单”值,例如数字字符串等。 根据您的情况,您可以将文件名传递给进程,该进程将依次读取文件并对其进行处理。