消费者生产者多线程问题

时间:2018-04-25 15:44:16

标签: python multithreading python-3.x python-multiprocessing python-multithreading

我在多线程中实现以下方案时遇到问题:

class OneThread(threading.Thread):
    def __init__(self, eval_queue, result_queue):
        threading.Thread.__init__(self)
        self.eval_queue = eval_queue
        self.result_queue = result_queue

    def run(self):
        while work_left:
            while (len(self.eval_queue.values()) < some_const or \
                  len(self.result_queue.values()) > 0):
                  # wait for eval queue to be full and result_queue
                  # to be empty

            # fill result_queue while emptying eval_queue


class ManyThread(threading.Thread):
    def __init__(self, eval_queue, result_queue, thread_id):
        threading.Thread.__init__(self)
        self.result_queue = result_queue
        self.eval_queue = eval_queue

    def run(self):
        while len(self.eval_queue.values()) < some_const and \
                len(self.result_queue.values()) == 0:
                # wait for eval_queue to not be full and
                # for result queue to be empty

        # fill eval_queue
        # wait until result_queue is full

        # use result_queue while emptying it

eval_queue = {}
result_queue = {}
evaluator = OneThread(eval_queue, result_queue)
evaluator.start()
for i in range(some_range):
    eval_queue.clear()
    result_queue.clear()
    for j in range(some_range):
        threads.append(ManyThread(eval_queue, result_queue))
        threads[-1].start()
    for thread in threads:
        thread.join()
evaluator.join()

我已经尝试过使用条件,但它在代码中也变得混乱 在我的脑中。主要目标是在一个线程上有一个评估器,它检查eval_queue是否已满并且result_queue是否为空。如果是,则求值程序线程对eval_queue执行某些操作,并在清空eval_queue时使用结果填充result_queue。相应的线程正在等待,直到result_queue被填充,以便在清空时使用它,并等待result_queue为空以开始再次填充它。

我似乎无法找到一种更好的方法来做这种方案而不会太痛苦!任何的想法 ? (不能使用多处理,因为我需要共享内存,而且我的计算并不完全受CPU控制,因此我可以通过这样做获得很多)!

谢谢!

0 个答案:

没有答案