Skip to content

Commit 4e844de

Browse files
Copilotnotfolder
andcommitted
Add comprehensive type hints and Japanese documentation to task handler and utility modules
Co-authored-by: notfolder <20558197+notfolder@users.noreply.github.com>
1 parent dc5a02e commit 4e844de

2 files changed

Lines changed: 259 additions & 38 deletions

File tree

filelock_util.py

Lines changed: 76 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,104 @@
1+
"""
2+
ファイルロックユーティリティ.
3+
4+
このモジュールは、複数プロセス間での排他制御を実現するための
5+
ファイルロック機能を提供します。同一ファイルに対する同時アクセスを
6+
防止するために使用されます。
7+
"""
8+
19
import os
210
import sys
11+
from typing import Any, Optional, TextIO
312

413
import portalocker
514

615

716
class FileLock:
8-
def __init__(self, lockfile):
17+
"""
18+
ファイルベースの排他制御ロック.
19+
20+
ファイルシステムを使用してプロセス間の排他制御を実現します。
21+
コンテキストマネージャーとして使用することで、自動的にロックの
22+
取得と解放を行います。
23+
"""
24+
25+
def __init__(self, lockfile: str) -> None:
26+
"""
27+
ファイルロックを初期化する.
28+
29+
Args:
30+
lockfile: ロックファイルのパス
31+
"""
932
self.lockfile = lockfile
10-
self.fp = None
33+
self.fp: Optional[TextIO] = None
1134

12-
def acquire(self):
35+
def acquire(self) -> None:
36+
"""
37+
ロックを取得する.
38+
39+
指定されたロックファイルに対して排他ロックを取得します。
40+
既に他のプロセスがロックを保持している場合は、プログラムを終了します。
41+
42+
Raises:
43+
SystemExit: 他のプロセスがロックを保持している場合
44+
"""
45+
# ロックファイルを書き込みモードで開く
1346
self.fp = open(self.lockfile, "w")
47+
1448
try:
49+
# 排他ロック + ノンブロッキングでロックを取得
1550
portalocker.lock(self.fp, portalocker.LOCK_EX | portalocker.LOCK_NB)
1651
except portalocker.LockException:
52+
# ロックの取得に失敗した場合(他のプロセスが保持中)
1753
print(f"他のプロセスがロック中です: {self.lockfile}")
1854
sys.exit(1)
1955

20-
def release(self):
56+
def release(self) -> None:
57+
"""
58+
ロックを解放する.
59+
60+
取得したロックを解放し、ファイルハンドルを閉じます。
61+
エラーが発生してもプログラムの実行は継続されます。
62+
"""
2163
if self.fp:
2264
try:
65+
# ロックを解放
2366
portalocker.unlock(self.fp)
2467
except Exception:
68+
# エラーが発生してもプログラムを継続
69+
# (プロセス終了時に自動的にロックは解放される)
2570
pass
71+
72+
# ファイルハンドルを閉じる
2673
self.fp.close()
2774
self.fp = None
2875

29-
def __enter__(self):
76+
def __enter__(self) -> "FileLock":
77+
"""
78+
コンテキストマネージャーの開始処理.
79+
80+
with文で使用した際にロックを自動的に取得します。
81+
82+
Returns:
83+
自分自身のインスタンス
84+
"""
3085
self.acquire()
3186
return self
3287

33-
def __exit__(self, exc_type, exc_val, exc_tb):
88+
def __exit__(
89+
self,
90+
exc_type: Optional[type],
91+
exc_val: Optional[Exception],
92+
exc_tb: Optional[Any],
93+
) -> None:
94+
"""
95+
コンテキストマネージャーの終了処理.
96+
97+
with文のブロックを抜ける際にロックを自動的に解放します。
98+
99+
Args:
100+
exc_type: 例外の型
101+
exc_val: 例外の値
102+
exc_tb: トレースバック情報
103+
"""
34104
self.release()

0 commit comments

Comments
 (0)