我希望将来自多个工作线程的数据发送到一个线程,让该线程处理收到的所有数据,并将数据发送到多个工作线程,每个线程接收不同的数据。
我希望所有线程都能运行很长时间。
我有点想使用队列并想到这样的事情:
from threading import Thread
import Queue
import time
import random
nr_of_workers = 3
class SyncData(Thread):
def __init__(self, q_in, q_out):
Thread.__init__(self)
self.setDaemon(True)
self.q_in = q_in
self.q_out = q_out
self.start()
def run(self):
for j in range(4):
msg_list = []
for i in range(nr_of_workers):
msg_list.append( self.q_in.get() )
self.q_in.task_done()
for i in range(nr_of_workers):
addr = msg_list[i][0]
print "addr " , addr
message = msg_list[i][1]
message_out = "message from thread addr " + str(addr) + " " + message
self.q_out.put(( addr, message_out ))
time.sleep(2.0)
class ThreadWorker(Thread):
def __init__(self, q_in, q_out, addr):
Thread.__init__(self)
self.addr = addr
self.q_in = q_in
self.q_out = q_out
self.setDaemon(True)
self.start()
def run(self):
for j in range(4):
self.q_out.put((self.addr, "hello from thread"))
recv_msg = self.q_in.get()
self.q_in.task_done()
print recv_msg[1]
q_sync2workers = Queue.Queue()
q_workers2sync = Queue.Queue()
sync = SyncData(q_workers2sync, q_sync2workers)
threads = []
for i in range(nr_of_workers):
threads.append(ThreadWorker(q_sync2workers, q_workers2sync, i))
while True:
pass
其中每个ThreadWorker通过队列发送数据,并通过不同的队列接收数据。唯一的问题是我希望SyncData对象将不同的数据发送到不同的ThreadWorker,每个部分通过队列发送的地址类型为id,这样每个ThreadWorker只获取为该特定ThreadWorker指定的队列中的元素。
我真的不想为每个ThreadWorker创建一个队列,因为我的真实应用程序将在运行时添加和删除ThreadWorkers。
有关良好策略的任何提示,无论是使用队列还是更好的练习策略?