问题描述
我有多个进程在运行,它们将一个 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
- 我的理解是生产者进程需要复制数据并将其发送到队列中吗?如果是这样,为什么不直接发送一个指向数据的“指针”。这样效率会更高。
- 如果 numpy 数组是密集的怎么办?我将如何“压缩”numpy 数组并将其发送到队列?
- 如何提高消费者进程的性能?在我看来,由于写入是在硬盘上执行的,因此没有太大的改进空间(如果重要的话,我使用的是 luster 文件系统)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)