本記事ではPythonのthreadingメソッドであるRLockをメモ程度にまとめています。Pythonは非常に人気なプログラミング言語です。そんなPythonでのRLockの使い方が参考になれば幸いです。
本記事の目標
threadingモジュールのRLockメソッドはLock内でLockを行うことを可能にします。
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^)/
リンク