Python 生成器生成的 3 个队列,由多处理消耗

Python 3 queue produced by generator, consumed by multiprocesssing

我有一个会生成超过 1 万亿个字符串的生成器,我想将它们放在一个队列中,并让一组工作人员使用该队列。然而,我无法将整个 1 万亿个字符串放入我的内存并将它们映射到线程。

Generator 很快,consumption worker 不是。我需要将队列的长度保持在一定水平,以免破坏我的记忆。这意味着我需要想出一种方法来暂停和重新开始给队列喂食。

任何人都可以提供提示或如何在 Python 3.4 中完成此任务吗?

您可以指定队列的最大大小:

q = queue.Queue(10)   # max size of the queue is 10

当队列达到最大大小时,新的插入将被阻塞,直到项目从队列中移除。

您的生成器线程可以生成项目并将它们放入队列。如果它领先于消费者线程太远,它就会阻塞。

while not done:
   e = generate next item
   q.put(e)         # will block if queue is full

参见:

https://docs.python.org/3/library/queue.html

了解更多信息。