我正在寻找使用python的多处理模块来创建一个进程,该进程通过opencv的python接口不断地轮询网络摄像头,将任何结果图像发送到一个队列,其他进程可以从中访问它们。但是,每当我尝试对队列中其他进程检索到的图像执行任何操作时,都会遇到挂起(Ubuntu 12.04 上的 python 2.7)。这是一个最小的例子:
import multiprocessing
import cv
queue_from_cam = multiprocessing.Queue()
def cam_loop(queue_from_cam):
print 'initializing cam'
cam = cv.CaptureFromCAM(-1)
print 'querying frame'
img = cv.QueryFrame(cam)
print 'queueing image'
queue_from_cam.put(img)
print 'cam_loop done'
cam_process = multiprocessing.Process(target=cam_loop,args=(queue_from_cam,))
cam_process.start()
while queue_from_cam.empty():
pass
print 'getting image'
from_queue = queue_from_cam.get()
print 'saving image'
cv.SaveImage('temp.png',from_queue)
print 'image saved'
此代码应该运行到“保存图像”的打印输出,然后挂起。有什么想法可以解决这个问题吗?