Pythonで排他ロックしてファイルに書き込む

排他ロックとは?

排他ロックしてファイルを壊れ難くしてみます。

目次

排他ロックしてファイルに書き込む

Pythonではfcntlモジュール(2.x)(3.x)を利用します。

WindowsではサポートされていないのでWindowsでは動作しません。
r+の読み書きモードでは新たにファイルは作られません。あらかじめカラのtest.txtを用意します。

# -*- coding: utf-8 -*-
import fcntl, os

filename = 'test.txt'

# ファイルを読み書きモードで開く
with open(filename, 'r+') as f:
    try:
        # ファイルを排他ロックする
        fcntl.flock(f, fcntl.LOCK_EX)

        # ファイルから読み込む
        data = f.readlines()

        # ファイルを切り詰める
        f.truncate(0)

        # ファイルの位置をリセット
        f.seek(os.SEEK_SET)

        # データを加える
        data.append('hoge\n')

        # ファイルに書き込む
        f.writelines(data)
    except IOError:
        print('flock() failure')

その他ファイル系操作

ファイルを開く

ファイルの存在確認