使用队列

时间:2015-09-29 12:27:37

标签: python multithreading queue

我希望将来自多个工作线程的数据发送到一个线程,让该线程处理收到的所有数据,并将数据发送到多个工作线程,每个线程接收不同的数据。

我希望所有线程都能运行很长时间。

我有点想使用队列并想到这样的事情:

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。

有关良好策略的任何提示,无论是使用队列还是更好的练习策略?

0 个答案:

没有答案