我想使用多处理来分离游戏中的两个任务:从网络摄像头中提取图像和在屏幕上显示图像。我之所以想这么做,是因为
并希望分离两者的时间延迟,理想的选择负载。使用线程,我没有问题,将图像从一个线程发送到另一个线程。然而,我得到了一个滞后的形象。我想测试使用多处理是否可以减少图像的延迟。
这是一个问题:我收到一个错误后,将图像从相机进程发送到屏幕进程。从队列中提取图像后,使用
imgmsg = img_q.get() 我检查图像的大小
imgmsg.img.get_width()如前所述,对于线程,这将返回正确的图像宽度。但是,通过多处理,我得到了以下错误
Process Process-1: Traceback (most recent call last): File "/usr/lib/python3.2/multiprocessing/process.py", line 267, in
_bootstrap
self.run() File "/usr/lib/python3.2/multiprocessing/process.py", line 116, in run
self._target(*self._args, **self._kwargs) File "test_photoBoothMultiProc.py", line 21, in consumer
photoBoothScreen.screenThread(in_q, img_q) File "/home/pi/pyBooth/thread_photoBoothScreen.py", line 68, in screenThread
print(imgmsg.img.get_width()) pygame.error: display Surface quit所以图像似乎在队列中丢失了吗?我试着读到这一点,当通过队列传输更大的物体时,似乎会出现问题。这是正确的吗?我该如何规避或解决这个问题?
发布于 2015-06-13 09:55:12
在发送到另一个进程之前,先序列化映像(使用pygame.image.tostring/pygame.image.fromstring)。
那应该管用。这样,您只发送图像本身的数据,而不是一个Surface实例(因此它完全独立于吡游)。
注意,还可以通过对字符串调用.encode("zlib")/.decode("zlib")来进一步压缩该字符串。
https://stackoverflow.com/questions/30790191
复制相似问题