假设我有一个线程池。这个线程池使用两个队列q1
和q2
. 它读取q1
并写入新项目q2
。当q1
为空时,我们交换两个队列q1, q2, = q2, q1
并重复该过程,直到两个队列都为空。为了同步线程,我使用了另一个仅包含一个项目的队列,并在进程结束时删除了该项目。
我认为这是一种非常愚蠢的做法。有什么改进建议吗?
文档上有一个非常好的简单示例,但只有一个队列。我的解决方案看起来不太好,如果它是正确的:
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()