【发布时间】:2015-04-05 14:57:28
【问题描述】:
我希望在执行多线程编程的同时,在 Python 中拥有一个单一的生产者、多个消费者的架构。我希望有这样的操作:
- 生产者产生数据
- 消费者 1 ..N(N 是预先确定的)等待数据到达(阻塞),然后以不同的方式处理 SAME 数据。
所以我需要所有消费者从生产者那里获取相同的数据。
当我使用 Queue 来执行此操作时,我意识到除了第一个使用者之外的所有人都会对我拥有的实现感到饥饿。
一种可能的解决方案是为每个消费者线程设置一个唯一的队列,其中生产者将相同的数据推送到多个队列中。有没有更好的方法来做到这一点?
from threading import Thread
import time
import random
from Queue import Queue
my_queue = Queue(0)
def Producer():
global my_queue
my_list = []
for each in range (50):
my_list.append(each)
my_queue.put(my_list)
def Consumer1():
print "Consumer1"
global my_queue
print my_queue.get()
my_queue.task_done()
def Consumer2():
print "Consumer2"
global my_queue
print my_queue.get()
my_queue.task_done()
P = Thread(name = "Producer", target = Producer)
C1 = Thread(name = "Consumer1", target = Consumer1)
C2 = Thread(name = "Consumer2", target = Consumer2)
P.start()
C1.start()
C2.start()
在上面的示例中,C2 被无限期阻塞,因为 C1 消耗 P1 产生的数据。我更希望 C1 和 C2 都能够访问 P1 生成的相同数据。
感谢任何代码/指针!
【问题讨论】:
-
既然你有 N 个消费者,我会使用线程/进程池
标签: python multithreading queue