web-dev-qa-db-ja.com

Python Queue get()/ task_done()の問題

キューの私の消費者側:

_m = queue.get()
queue.task_done()

<rest of the program>
_

質問:

  1. task_done()は効果的にmをキューからポップし、コンシューマーがキューに持っているロックを解放しますか?

  2. プログラムの残りの部分では、mを使用する必要があります。安全ですか、それともtask_done()を呼び出す前にコピーする必要がありますか、それともtask_done()の後にmを使用できますか?

幸せになる

33
bandana

いいえ、queue.get()はアイテムをキューからポップします。それを行った後、プロデューサーが正常に動作し、それ以上触れない限り、それを使って好きなことを行うことができます。 queue.task_done()は、何かが完了したことをキューに通知するためにのみ呼び出されます(特定のアイテムについても認識せず、キュー内の未完了のアイテムをカウントするだけです)。そのため、queue.join()作業が終了したことを知っています。

57