キューの私の消費者側:
_m = queue.get()
queue.task_done()
<rest of the program>
_
質問:
task_done()
は効果的にm
をキューからポップし、コンシューマーがキューに持っているロックを解放しますか?
プログラムの残りの部分では、m
を使用する必要があります。安全ですか、それともtask_done()
を呼び出す前にコピーする必要がありますか、それともtask_done()
の後にm
を使用できますか?
幸せになる
いいえ、queue.get()
はアイテムをキューからポップします。それを行った後、プロデューサーが正常に動作し、それ以上触れない限り、それを使って好きなことを行うことができます。 queue.task_done()
は、何かが完了したことをキューに通知するためにのみ呼び出されます(特定のアイテムについても認識せず、キュー内の未完了のアイテムをカウントするだけです)。そのため、queue.join()
作業が終了したことを知っています。