LoginSignup
2
4

More than 5 years have passed since last update.

Pythonでロックファイルでの排他制御

Posted at

pythonで簡単にプロセス間の排他制御がしたかったのでロックファイルによる実装を行いました。
尚、確認している環境は以下です。

  • mac(OS X El Capitan バージョン 10.11.5)
  • pip利用可能
  • python 2.7.9

利用するもの

  • zc.lockfile

指定した名称のロックファイルを作成し、排他制御をしてくれるライブラリ。
pidで管理されるので、ロックしたプロセスが終了した場合、closeしなくても排他状態が解放されるので例外が出ても扱いやすい。と思います。
以下で、いつものようにインストール

$ pip install zc.lockfile

利用例

特に意味はないですが、デコレータで実装。
ロック中の処理をちゃんとしたい場合(ログを出力するとか、待機するとか)には使えないです。
なにはともあれ排他制御したい人向け。

lock.py
# -*- coding: utf-8 -*-
import sys
from zc import lockfile
from zc.lockfile import LockError


def lock_or_through(func):
    '''ロックファイルによる排他制御デコレータ
    ロックされている場合は処理自体をスルー
    '''
    def lock(*args, **kwargs):
        lock = None
        try:
            lock = lockfile.LockFile('lock')
        except LockError:
            print("locked")
            return

        func(*args, **kwargs)

        # 対象のpidが有効でなければロックされないので例外が出ても実質問題無し
        lock.close()

    return lock


@lock_or_through
def main(sys_argv):
    """ロックファイルで排他制御したい処理"""
    print('process you need')

if __name__ == '__main__':
    main(sys.argv)

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4