使用Python线程,如何才能等到所有队列都完成后再加入线程?

2024-04-26 17:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不同的队列,A和B,由它们自己的线程处理。线程A将页面从internet上拉出来,线程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也可以解除阻塞:

^{pr2}$

如您所见,如果QueueA变空,那么它的所有线程都会死亡,并且不会被恢复。解决这个问题的合适方法是什么?在

(我花了无数的时间来研究这个问题,除非我遗漏了一些我找不到这类问题的参考资料,谢谢你的帮助!)在


Tags: 方法raw队列链接html页面links线程