我有一个生成器,它将生成超过1万亿个字符串,我想将它们放入队列中,并让一个工作池来使用队列。但是我无法承担将整个1万亿个字符串放在我的记忆中并将它们映射到线程。
发电机非常快,消费工人不是。我需要将队列长度保持在一定水平,以免炸掉我的记忆。这意味着我需要找到一种方法来暂停和重新开始提供队列。
任何人都可以在Python 3.4中提供如何完成此任务的提示吗?
答案 0 :(得分:3)
您可以指定队列的最大大小:
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
了解更多信息。