使用Python线程,如何在线程加入之前等待所有队列完成?

时间:2014-09-19 21:44:24

标签: python multithreading

我有2个不同的队列,A和B,由他们自己的线程处理。线程A从互联网上拉出页面,线程B扫描该页面中的所有链接并将它们添加到线程A的队列中。可以想象,单个队列可以暂时清空,直到它的伴随线程为其添加更多内容。但是,由于其中任何一个都可以随时暂时清空,所以我不希望它们在一个空的时候立即解锁,只有当两个人在同一个实例中变空时。

我怎样才能做到这一点?我的伪代码,真正的交易太乱了

QueueA
QueueB

ThreadA:
    pull page
    put raw HTML in QueueB

ThreadB:
    pull links from raw HTML
    add links to QueueA


QueueA.join()
QueueB.join()

我也试过这个,使用QueueC来检查其他队列是否都是空的,它将解除阻塞,以便QueueA和B也能解锁:

QueueA
QueueB
QueueC

ThreadA:
    pull page
    put raw HTML in QueueB

ThreadB:
    pull links from raw HTML
    add links to QueueA

ThreadC:
    queues = QueueC.get()
    while True:
        time.sleep(1) 
        for q in queues:
            if q.full():
                return
        self.parent_queue.task_done()           

QueueC.join()
QueueA.join()
QueueB.join()

正如您所看到的,如果QueueA变空,它的所有线程都会死亡并且不会被复活。解决这个问题的恰当方法是什么?

(我花了无数个小时研究它,除非我错过了一些我无法找到这个特定类型问题的参考,谢谢你的帮助!)

0 个答案:

没有答案