假设我有一个线程池。这个线程池使用两个队列q1
和q2
。它从q1
读取并在q2
上写入新项目。当q1
为空时,我们交换两个队列q1, q2, = q2, q1
,我们重复该过程,直到两者都为空。为了同步线程,我使用另一个只包含一个项目的队列,并在流程结束时删除此项目。使用两个队列同步线程
我认为这是一个非常愚蠢的做法。任何改进建议?
一个非常漂亮的简单例子是docs,但只有一个队列。我的解决方案看起来并不很漂亮,如果是正确的:
global flag
global lock
global barrier
global q1
global q2
global q
while True:
if q1.empty():
flag = False
barrier.wait() # wait for all the theads to reach this point.
# execute the code of swapping queues only once
with lock:
if not flag:
flag = True
if q2.empty():
q.get()
q.task_done()
else:
q1, q2 = q2, q1
process_items_in_q1()
您正在使用2个输入队列的原因吗?如果你有一个工作者线程池,为什么没有一个输入队列让工作者从中获得工作?先进先出?双输入队列是否是一项要求? – user1836293
我正在实施BFS +我们发现的每个节点的一些东西。每个阶段的seaching可以并行化,但是当一个阶段完成后,才可以转到下一个阶段。当然,除非我错过了一个更好的主意。 –