生产者 - 消费者,Python中包含非常大的项目

时间:2016-08-31 19:50:12

标签: python multithreading multiprocessing

我在以下场景中工作(使用Python)。我有一个用随机算法优化的神经网络,需要一个恒定的训练数据流。每个数据都很大(让我们说50兆字节),我有很多数据。整个数据集太大而无法放入RAM中。我可以看到三种可能的方法来处理这些数据。

  1. 从硬盘顺序加载每个数据,然后执行神经网络的代码。由于显而易见的原因,这很慢。
  2. 使用多线程(线程库)。然后我可以让多个线程从硬盘驱动器加载数据并将它们放入主进程正在读取的队列中。虽然在我看来GIL(https://wiki.python.org/moin/GlobalInterpreterLock)正在减慢我的速度,但这种方法运作得相当不错。神经网络的梯度计算显然不是与硬盘驱动器读取并行执行。
  3. 使用多处理(多处理库)。这类似于2.虽然我需要使用的队列的实现是使用限制为非常小的Linux管道,因此主要过程大部分时间花费在队列中读取数据的小部分。
  4. 上述所有这些方式对我来说都是不可接受的。您能想到在Python中实现这样的生产者 - 消费者问题的更有效方式吗?

0 个答案:

没有答案