<p>您可以使用Python的<strong>多处理</strong>模块中的共享数组在进程之间快速共享大量数据。我没有任何像我建议的Redis答案那样的完整的、经过测试的代码,但是我有足够的代码让你开始。在</p>
<p>所以你可以使用:</p>
<pre><code>from multiprocessing import Process, Queue
from multiprocessing.sharedctypes import Array
from ctypes import c_uint8
</code></pre>
<p>然后在您的<code>main</code>中,您将声明一个大数组,可能大到足以容纳2-4个大图像:</p>
^{pr2}$
<p>以及</p>
<pre><code># Create zeroed out shared array
buffer = Array(c_uint8, bufShape[0] * bufShape[1] * bufShape[2])
# Make into numpy array
buf_arr = np.frombuffer(buffer.get_obj(), dtype=c_uint8)
buf_arr.shape = bufShape
# Create a list of workers
workers = [Worker(1, buffer, str(i)) for i in range(2)]
# Start the workers
for worker in workers:
worker.start()
</code></pre>
<p>然后,您将从<strong>流程</strong>类中派生工人,如下所示:</p>
<pre><code>class Worker(Process):
def __init__(self, q_size, buffer, name=''):
super().__init__()
self.queue = Queue(q_size)
self.buffer = buffer
self.name = name
def run(self,):
buf_arr = np.frombuffer(self.buffer.get_obj(), dtype=c_uint8)
buf_arr.shape = bufShape
while True:
item = self.queue.get()
...
</code></pre>
<p>您可以在<code>run()</code>的开头看到,worker只是从大的共享缓冲区生成一个Numpy数组,所以worker正在读取主程序正在写入的内容,但希望您对它进行同步,以便main在写入帧2-4时,worker正在读取帧1。在</p>
<p>然后希望您可以看到,主程序可以通过使用以下方法将一个简单的帧索引写入工人的队列(而不是发送整个帧本身),从而告诉工人存在一个数据帧:</p>
<pre><code>worker.queue.put(i)
</code></pre>