この記事では、Python スレッドでのセマフォと制限付きセマフォについて説明します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。
セマフォはカウンターベースの同期プリミティブです。acquire() メソッドが呼び出されるたびに、カウンターは 1 ずつ減らされ、release() が呼び出されるたびに、 ) メソッドを呼び出すと、このカウンターは 1 ずつ増加します。カウンタが 0 の場合、acquire() メソッドは、別のスレッドが release() メソッドを呼び出すまでブロックされます。
s=Semqphore(value)
新しいセマフォを作成します。 value はカウンタの初期値です。値が省略された場合、デフォルトは 1
s.acquire(blocking): セマフォを取得します。内部カウンターが 0 より大きい場合、このメソッドはその値を 1 ずつ減らします。
それではすぐに戻ってください。値が 0 の場合、このメソッドは、別のスレッドが release() メソッドを呼び出すまでブロックされます。
ブロッキング パラメーターの動作は、Lock オブジェクトと RLock オブジェクトについて説明したものと同じです。
s.release(): 内部カウンタ値に 1 を加算してセマフォを解放します。
カウンタが 0 で、別のスレッドが待機している場合、そのスレッドは起動されます。
複数のスレッドが待機している場合、acquire() 呼び出しから返されるスレッドは 1 つだけであり、順序は未定義です。
bs=BoundedSemaphore(value)
新しい境界セマフォを作成します。
#セマフォと境界付きセマフォの違いBoundedSemaphore は Semaphore とまったく同じように機能しますが、release() は操作の数は、acquire() 操作の数を超えることはできません。 セマフォとミューテックスの微妙な違いセマフォはシグナルの送信に使用できます。たとえば、acquire() メソッドと release() メソッドを異なるスレッドから呼び出して、プロデューサー スレッドとコンシューマー スレッドの間で通信することができます。 関連する推奨事項:Python セマフォ (セマフォ)それは何ですか? (詳細な例)
以上がPython スレッドでのセマフォと制限付きセマフォの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。