Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python_Parrotと学ぶPythonの並行実行.pdf

rf-castle
August 22, 2021
63

 Python_Parrotと学ぶPythonの並行実行.pdf

rf-castle

August 22, 2021
Tweet

Transcript

  1. 使い方  threading.Threadか、multiprocessing.Processクラスを使う。  コンストラクタ引数(すべてキーワード付き引数)  group:常にNoneにする。将来 ThreadGroup クラスが実装されたときの拡張用に予約され ている。

     target: やらせたい処理をcallableオブジェクト(関数など)で渡す  args,kwargs:↑に渡したい引数を指定する。  args:キーワードなし引数のタプル  kwargs:キーワード付き引数の辞書型  daemon:デーモンスレッドであるかを指定する。  デーモンスレッド以外のスレッドがすべて終了すると、Pythonプログラム全体が終了する。  Noneにすると、現在のスレッドとおなじになる。
  2. 使い方2  メソッド  start()  スレッド・プロセスの活動を開始するメソッド。  join() 

    スレッド・プロセスが終わるまで待機するメソッド。  自分自身のスレッド・プロセスに対してこのメソッドを呼ぶとデッドロックを起こすため エラーになる。 (もしこれが許されれば永遠に待つことになる)  まだ開始していない場合も同様。
  3. 同期プリミティブ  Lock  ロックとアンロック状態があり、デフォルトはアンロック。  一般に、同時アクセスのできないリソースを利用する場合に使う  acquire() 

    アンロック状態ならロック状態にして即座に処理を戻す(ロックの獲得)  ロック状態なら、アンロック状態になるまで待つ。  release()  ロックをアンロックする。  acquire関数でロックを獲得しようとしているスレッドがあれば、 どれか1つがロックを獲得できる。
  4. 同期プリミティブ  Semaphore  内部カウンタがあり、インスタンス作成時に初期値を決める  主に、同時に使える数に制限のあるリソースに対して使用する  acquire 

    内部カウンタが0よりも大きければ、内部カウンタを1つ下げてすぐに処理を返す  内部カウンタが0ならreleaseによって内部カウンタが1以上になるまで待つ  release(n=1)  セマフォを解放して、内部カウンタをn増加させる。
  5. 同期プリミティブ  Event  真と偽のフラグがあり、デフォルトは偽  主に、事前処理があってその処理を待ってからでないと処理できないスレッドに対 して使う  set()

     フラグを真にして、waitメソッドでブロックされているすべてのスレッドを起こす。  wait()  フラグが真なら直ちに処理が戻る  フラグが偽なら真になるまで(setが呼ばれるまで)待ってから戻る  clear(): フラグを偽に戻す  is_set(): フラグの確認