【问题标题】:Python 3 queue produced by generator, consumed by multiprocesssing生成器生成的 Python 3 队列,由多进程使用
【发布时间】:2015-08-29 05:32:21
【问题描述】:

我有一个生成器,可以生成超过 1 万亿个字符串,我想把它们放在一个队列中,让一个工作池来消费队列。但是,我负担不起将全部 1 万亿个字符串放在内存中并将它们映射到线程。

发电机很快,消费工人不是。我需要将队列的长度保持在一定水平,以免破坏我的记忆。这意味着我需要想办法暂停并重新开始喂食队列。

谁能提供一个提示,或者如何在 Python 3.4 中完成这项任务?

【问题讨论】:

  • 我们说的是美国万亿还是英国万亿?
  • @user5402 10^12 级别。每个字符串大约 100 个字符。

标签: python multithreading queue


【解决方案1】:

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

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

了解更多信息。

【讨论】:

  • 我的问题是,在消费者跑得比生产者快很多的情况下,如何动态平衡生产者和消费者线程?例如我不想手动指定较大的最大队列大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 2016-12-16
  • 2019-10-22
  • 1970-01-01
  • 2013-10-02
  • 2014-09-24
  • 2012-06-27
相关资源
最近更新 更多