我希望在执行多线程编程时,在
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产生的SAME数据.
感谢您的任何代码/指针!