Python のマルチスレッドのファイル書き込みにおけるロックの実装方法について理解したい
Pythonでマルチスレッド操作を行うには`threading`モジュールを利用可能で、`threading.Lock()`を使用してロックオブジェクトを作成します。
ファイルに並行して書き込むロック付きのコードサンプルを以下に示します:
import threading
def write_file(lock, filename, content):
# 获取锁
lock.acquire()
try:
with open(filename, 'a') as f:
f.write(content + '\n')
finally:
# 释放锁
lock.release()
if __name__ == '__main__':
# 创建一个锁对象
lock = threading.Lock()
# 创建多个线程,并启动
threads = []
for i in range(5):
t = threading.Thread(target=write_file, args=(lock, 'test.txt', f'Thread {i}'))
threads.append(t)
t.start()
# 等待所有线程结束
for t in threads:
t.join()
上記のコードでは、write_file() 関数はファイルに書き込みを行う関数で、lock.acquire() はロックを獲得するために、lock.release() はロックを開放するために使われています。各スレッドでは、まずロックを獲得し、ファイルの書き込み処理を実行し、ロックを解放することで、各スレッドのファイル書き込み処理の排他性を確保しています。
ロックを使用する際は、lock を取得した後のコードブロックで例外が発生した場合でも、きちんとロックを解放できるように注意が必要で、一般的には try…finally を用いてロックの解放を確実に行う。