threadingモジュールのドキュメントには、次のように書かれています。
acquire()
メソッドを持つこのモジュールによって提供されるすべてのオブジェクトは、ステートメントrelease()
のコンテキスト マネージャーとして使用できます。with
このacquire()
メソッドは、ブロックに入るときにrelease()
呼び出され、ブロックから出るときに呼び出されます。
ブロッキング モードと非ブロッキング モードのどちらで呼び出されるのか疑問に思っていました。
CPython sourceを見ると、デフォルトの引数で呼び出されているように見えます。つまり、ブロッキング モードです。
特に注目したいメソッドは、ブロック__enter__()
の先頭で呼び出される と、ブロックの最後で呼び出される です。with
__exit__()