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

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

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

本記事の目標

threadingモジュールのLockメソッドを利用してスレッドの制御を行います。
このメソッドを利用すれば、
「lock.acquire()」〜「lock.release()」までの間の処理が他のスレッドに邪魔をされなくなります。
このacquireとreleaseメソッドはクラスを跨ぐことも可能です。
一般的にはwithステートメントで記述することが多いらしいです。

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

Pythonコード

あまり恩恵を受けられるコードではありませんが、Lockの使い方は下のような感じ。
process1とprocess2でスレッドの処理を再現しています。
process1では「lock.acquire()」〜「lock.release()」を利用したLockの例、process2ではwithステートメントを利用したLockの例です。どちらも同様の処理です。

import threading
import time

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

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

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

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

    p1.start()
    p2.start()

実行結果は明らかなので省いておきます。
詳しいLockの使い方は公式リファレンスからどうぞ。

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

超オススメのPC用品

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

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

コメントを残す

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