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
了解更多信息。
我有一个会生成超过 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
了解更多信息。