Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのバリアオブジェクト


バリアは、単一または複数のスレッドが一連のアクティビティのポイントまで待機し、一緒に進行するPython同期手法の1つを提供します。

バリアオブジェクトを定義するには、「スレッド化。バリア」を使用しています。

threading.Barrier(parties, action = None, timeout = None)

どこで、

  • パーティ=スレッド数

  • action=リリース時にスレッドの1つによって呼び出されます。

  • タイムアウト=デフォルトのタイムアウト値。 wait()にタイムアウト値が指定されていない場合は、このタイムアウト値が使用されます。

下記のメソッドはバリアクラスで使用されます。

Sr.No メソッドと説明
1 当事者
共通のバリアポイントに到達するために必要なスレッドの数。
2 n_waiting
共通バリアポイントで待機しているスレッドの数
3 壊れた
ブール値、True-バリアが壊れた状態の場合はTrue、それ以外の場合はFalse。
4 wait(timeout =None)
通知されるか、タイムアウトが発生するまで待ちます。このメソッドが呼び出されたときに呼び出し元のスレッドがロックを取得していない場合、ランタイムエラーが発生します。
このメソッドは、基になるロックを解放してから、別のスレッドで同じ条件変数に対するnotify()またはnotify_all()メソッド呼び出しによってウェイクアップされるまで、またはオプションのタイムアウトが発生するまでブロックします。目覚めたりタイムアウトしたりすると、ロックを再取得して戻ります。
タイムアウトのとき 引数が存在し、なしではありません 、操作のタイムアウトを秒単位(またはその一部)で指定する浮動小数点数である必要があります。
5 reset()
バリアをデフォルト状態に設定または戻します。空の状態。そして、それを待っているスレッドはBrokenBarrierErrorを受け取ります。
6 Abort()
これにより、バリアが壊れた状態になります。これにより、すべてのアクティブなスレッドまたはwait()の今後の呼び出しが、BrokenBarrierErrorで失敗します。

BarrierThread.py

from random import randrange
from threading import Barrier, Thread
from time import ctime, sleep
num = 4
# 4 threads will need to pass this barrier to get released.
b = Barrier(num)
names = ['India', 'Japan', 'USA', 'China']
def player():
   name = names.pop()
   sleep(randrange(2, 5))
   print('%s reached the barrier at: %s \n' % (name, ctime()))
   b.wait()
threads = []
print("Race starts now…")
for i in range(num):
   threads.append(Thread(target=player))
   threads[-1].start()
"""
Below loop enables waiting for the threads to complete before moving on with the main script.
"""
for thread in threads:
   thread.join()
print("All Reached Barrier Point!")

結果

Race starts now…
India reached the barrier at: Fri Jan 18 14:07:44 2019
China reached the barrier at: Fri Jan 18 14:07:44 2019
Japan reached the barrier at: Fri Jan 18 14:07:46 2019
USA reached the barrier at: Fri Jan 18 14:07:46 2019
All Reached Barrier Point!

  1. Pythonのファイルオブジェクト?

    Pythonでは、ファイルの読み取りまたは書き込みを試みるたびに、ライブラリがネイティブに処理されるため、ライブラリをインポートする必要はありません。 最初に行うことは、組み込みのopen関数を使用してファイルオブジェクトを取得することです。 open関数はファイルを開き、ファイルオブジェクトを返します。ファイルオブジェクトには、情報を取得したり、開いたファイルを操作したりするために使用できるメソッドと属性が含まれています。 ファイルとは何ですか? ファイルに対して操作を行う前に、まずファイルとは何かを理解しましょう。ファイルは、関連情報を保存するためのディスク上の名前付きの場所です。フ

  2. Python関数はオブジェクトですか?

    Pythonは、defステートメントを使用するとき、またはラムダ式を使用するときに、関数オブジェクトを作成します。 次のように、関数オブジェクトに属性を割り当てて取得できます 例 def foo(): pass foo.score = 20 print(type(foo)) print(foo.score) print(type(lambda x:x)) 出力 次の出力が得られます C:/Users/TutorialsPoint1/~.py <type 'function'> 20 <type 'function'> はい、Python