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

Python Multiprocessing with a queue as input for a camera

我有一台每秒生成 20 张 numpy 图像的相机,它会将这些 numpy 图像放入队列中。

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

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

我试过并从 Whosebug 中读到 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()