将 nympy 对象发送到队列的有效方法

问题描述

我有多个进程在运行,它们将一个 numpy 对象放入队列,一个进程使用者处理该对象。我注意到当我将一个 numpy 对象转换为一个稀疏对象时(这并不总是可能的),发送该对象所花费的时间会大大减少。其次,消费者进程将获取该对象并将其保存到 PyTable 对象中,它需要访问硬盘。因此,当消费者进程被发送到队列的数据量淹没时,消费者进程就会落后并成为系统中的瓶颈。以下摘录显示了生产者进程的作用和消费者进程的作用:

#Producer
def writer(queue,data):
    queue.put(data)

#Consumer
def fill_data(self):
    try:
       g_indxs,data = self.queue.get()
       t = time.time()
       self.W_hat[:,g_indxs] = data.todense()
       print("time to fill: ",time.time() - t)
       # Todo fix the way i handle exception.
    except Exception:
       print("Exception while reading Queue")
       pass
  1. 我的理解是生产者进程需要复制数据并将其发送到队列中吗?如果是这样,为什么不直接发送一个指向数据的“指针”。这样效率会更高。
  2. 如果 numpy 数组是密集的怎么办?我将如何“压缩”numpy 数组并将其发送到队列?
  3. 如何提高消费者进程的性能?在我看来,由于写入是在硬盘上执行的,因此没有太大的改进空间(如果重要的话,我使用的是 luster 文件系统)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)