问题描述
我有一个摄像头,每秒生成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()