队列作为相机输入的Python多处理

问题描述

我有一个摄像头,每秒生成20个numpy图像,它将把numpy图像放入队列。

我的工作是从队列中读取并将文件另存为jpeg。如果我按顺序执行此操作,则会丢失某些文件,因为保存一个jpeg所花费的时间超过50毫秒,因此队列迟早会满。

使用多线程无济于事,因为它们仍在使用一个cpu内核。我需要使用多重处理来使用不同的cpu内核保存文件。由于相机会连续生成图像,并且缓冲区(队列中的元素)一直在变化,因此我在google中找到的示例与我所需的不匹配,因为这些示例通常使用静态数组作为输入。

我尝试过并且还从stackoverflow读取到Pool不支持队列,因为队列的输入是不可迭代的。

我怀疑可以更改相机代码以将其保存到一个numpy图片数组中,但是问题仍然是,如果我使用Pool.map,如果数组的大小一直在变化,则可能无法正常工作

关于如何执行此任务的任何建议?

非常感谢您!

解决方法

您可以使用多处理程序包中的JoinableQueue

import multiprocessing as mp

def worker(queue):
  item = payloads_queue.get()
  # TODO: handle
  queue.task_done()


queue = mp.JoinableQueue()
# TODO: fill the queue with images to save

现在,刚开始生成mp.Process之类的进程,

p = mp.Process(target=worker,args=(queue,))

p.start()