トッカンソフトウェア

Python ロック

今回はロックをやります。Javaのsynchronizedみたいなことができます。


Django のサンプル

Django Get Postで作ったサンプルを変更します。先にそちらで環境を作って下さい。

hello/templates/test.html
				
from threading import Lock
from time import sleep

from django.shortcuts import render

# ロックオブジェクトを取得。最初に1回だけ実行
lock = Lock()


def index(request):
    message = request.POST.get("prm", "World")

    # ロックを取得。取得に成功するとTrueが戻される
    if lock.acquire(blocking=False):

        # ロック取得成功時の処理
        try:
            dic = {"msg": message}
            if message != "World":
                sleep(5)
        finally:

            # 取得したロックは必ずリリースする
            lock.release()
    else:

        # ロック取得失敗時の処理
        dic = {"msg": "LOCKされていた"}

    return render(request, 'test.html', dic)


			
acquireでロックを取得。今回はロック取得に失敗したら待たずに次の処理にいくが、ロックを取得するまで待たせることができる。
				
    # ロックを取得。ロックが取得できるまで待つ
    if lock.acquire():

    # ロックを取得。ロックが取得できるまで3秒だけ待つ
    if lock.acquire(timeout=3):

			



ページのトップへ戻る