由生成器生成的 Python 3 队列,由多进程消耗

Jim*_*myK 5 python queue multithreading

我有一个生成器会生成超过 1 万亿个字符串,我想把它们放在一个队列中,让一个工作池来消耗这个队列。但是,我无法将整个 1 万亿个字符串放入内存中并将它们映射到线程。

生成器非常快,消费工人不是。我需要将队列的长度保持在一定水平,以免破坏我的记忆。这意味着我需要找到一种方法来暂停和重新启动队列。

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

Eri*_*ikR 8

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

q = queue.Queue(10)   # max size of the queue is 10
Run Code Online (Sandbox Code Playgroud)

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

您的生成器线程可以只生成项目并将它们放在队列中。如果它超出消费者线程太远,它就会阻塞。

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

看:

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

了解更多信息。

  • 我的问题是,当消费者运行速度比生产者快得多的情况下,如何动态平衡生产者和消费者线程?例如,我不想手动指定一个大的最大队列大小。 (2认同)