ホームページ  >  記事  >  バックエンド開発  >  Python スレッドでの Timer オブジェクト、Lock オブジェクト、Rlock オブジェクトの簡単な紹介

Python スレッドでの Timer オブジェクト、Lock オブジェクト、Rlock オブジェクトの簡単な紹介

不言
不言オリジナル
2018-09-11 16:38:341777ブラウズ

この記事では、Python スレッドでの Timer オブジェクト、Lock オブジェクト、および Rlock オブジェクトについて簡単に紹介します。一定の参考値があります。必要な友人は参照してください。お役に立てば幸いです。

Timer オブジェクト、Lock オブジェクト、Rlock オブジェクト

Timer オブジェクト

Timer オブジェクトは、後で関数を実行するために使用されます。

構文:
t=Timer(interval,func,args,kwargs)

タイマー オブジェクトを作成し、間隔秒後に関数 func を実行します。args と kwargs は、func に渡されるパラメーターとキーワード引数を提供します。
タイマーは、start() メソッドを呼び出した後にのみ開始できます。

一般的に使用されるメソッド:

t.start(): タイマーを開始します。
t.cancal(): 関数が実行されていない場合は、タイマーをキャンセルします。

ロック オブジェクト

元のロック (ミューテックス ロック) は同期プリミティブであり、「ロック」と「ロック解除」の 2 つの状態があります。

状態がすでにロックされている場合、ロックを取得しようとしても、ロックが解放されるまでブロックされます。ロックの取得を待機しているスレッドが複数ある場合、ロックが解放されると 1 つのスレッドだけがロックを取得し、取得順序は不定になります。

構文:
lock=Lock()

新しい Lock オブジェクトを作成します。初期状態はロックが解除されています。

一般的に使用されるメソッド:

lock.acquire(blocking): ロックを取得します。必要に応じて、ロックが解放されるまでブロックします。
ブロッキングが false の場合、ロックが取得できない場合は直ちに False が返され、ロックの取得に成功した場合は True が返されます。

lock.release(): ロックを解放します。ロックがロック解除状態にある場合、または最初にacquire()メソッドを呼び出したスレッドとは別のスレッドからこのメソッドが呼び出された場合、エラーが発生します。報告。

Rlock オブジェクト

リエントラント ロックは、Lock オブジェクトと同様の同期プリミティブですが、同じスレッドがそれを複数回取得できます。

これにより、ロックを所有するスレッドがネストされたacquire()およびrelease()操作を実行できるようになります。この場合、最も外側の Release() 操作のみがロックをわずかにロック解除された状態にリセットできます。

構文:
rlock=RLock()

新しい再入可能なロック オブジェクトを作成します。

一般的に使用されるメソッド:

rlock.acquire(blocking): ロックを取得します。必要に応じて、ロックが解放されるまでブロックします。
ロックを所有するスレッドがない場合、ロックされ、再帰レベルは 1 に設定されます。
このスレッドがすでにロックを所有している場合、ロックの再帰レベルは 1 増加し、関数はすぐに戻ります。

rlock.release(): 再帰レベルを下げることでロックを解放します。デクリメント後の再帰レベルが 0 の場合、ロックはロック解除状態にリセットされます。そうしないと、ロックはロックされたままになります。
このメソッドは、現在ロックを所有しているスレッドによってのみ呼び出すことができます。

関連する推奨事項:

Python オブジェクト指向プログラミングにおけるクラスとオブジェクトの学習チュートリアル

Python マルチスレッド ロック、RLock、セマフォ、およびイベントのインスタンスを同期する

以上がPython スレッドでの Timer オブジェクト、Lock オブジェクト、Rlock オブジェクトの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。