スレッドのプールがあるとします。このスレッドのプールは、2 つのキューq1
と を使用しますq2
。からq1
新しいアイテムを読み書きしq2
ます。がq1
空になると、2 つのキューを交換し、q1, q2, = q2, q1
両方が空になるまでプロセスを繰り返します。スレッドを同期するために、アイテムを 1 つだけ含む別のキューを使用し、プロセスの最後にこのアイテムを削除します。
これは非常に愚かな方法だと思います。改善のための提案はありますか?
非常に簡単な例がドキュメントにありますが、キューは 1 つしかありません。それが正しい場合、私のソリューションはあまり見栄えがよくありません。
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()