【Python】RLockでスレッドを制御

【Python】RLockでスレッドを制御

本記事ではPythonのthreadingメソッドであるRLockをメモ程度にまとめています。Pythonは非常に人気なプログラミング言語です。そんなPythonでのRLockの使い方が参考になれば幸いです。

本記事の目標

threadingモジュールのRLockメソッドはLock内でLockを行うことを可能にします。
Lockについてあまりわからない方は下の記事からどうぞ。

【Python】Lockでスレッドを制御 【Python】Lockでスレッドを制御

先述の通り、二重でLockを行う際にRLockメソッドを利用してスレッドの制御を行います。

実行環境は「python 3.8.8」です。

Pythonコード

あまり恩恵を受けられるコードではありませんが、RLockの使い方は下のような感じ。
lock = threading.RLock()とインスタンスを作ることで、RLockを使えます。
少しごちゃごちゃしていますが、process1とprocess2のコードの内容は同じです。このことを考えるとやっぱりwithで書くのがシンプルで良さそう。

import threading
import time

def process1(lock):
    print('ーー処理1が開始')
    lock.acquire()  # スレッドのロックが開始。他のスレッドはreleaseされるまで処理はできない。
    time.sleep(3)  # 処理を再現

    # Lockの中のLockの開始
    lock.acquire()  # スレッドのロックが開始。他のスレッドはreleaseされるまで処理はできない。
    time.sleep(3)  # 処理を再現
    lock.release()  # スレッドのロックが終了。他のスレッドも処理が可能。
    # Lockの中のLockの終了

    lock.release()  # スレッドのロックが終了。他のスレッドも処理が可能。
    print('ーー処理1が終了')

def process2(lock):
    print('ーー処理2が開始')
    with lock:  # スレッドのロックが開始。他のスレッドはwithステートメントを抜けるまで処理できない。
        time.sleep(3)  # 処理を再現
        with lock:
            time.sleep(3)
    print('ーー処理2が終了')

if __name__ == '__main__':
    lock = threading.RLock()

    # スレッドを行うインスタンスの作成
    p1 = threading.Thread(target=process1, args=(lock,))
    p2 = threading.Thread(target=process2, args=(lock,))

    p1.start()
    p2.start()

詳しいRLockの使い方は公式リファレンスからどうぞ。

ということで本記事はPythonでのthreadingを用いたRLockの実装方法を紹介しました。
最後まで読んでいただきありがとうございました\(^o^)/

超オススメのPC用品

PCを操作する上で、トラックボールマウスが非常におすすめです!
僕も感動したこのマウスを、騙されたと思って使ってみてください!(^^)

外部モニターで2倍以上の効率化が見込めます!
安いものだと、たったの1万円前後なのでおすすめですよー!\(^o^)/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です