Pythonで複数のプロセスで同じファイルに書き込む方法は?

Pythonで同一ファイルにマルチプロセスで書き込む方法:

  1. 排他ロック(Lock)の使用:複数のプロセスでロックを共有し、書き込み処理を行う際には、一プロセスのみがロックを獲得し、他のプロセスがロックが解放されるまで待機します。
import multiprocessing
def write_data(lock, filename, data):
with lock:
with open(filename, 'a') as file:
file.write(data)
if __name__ == '__main__':
lock = multiprocessing.Lock()
processes = []
for i in range(5):
p = multiprocessing.Process(target=write_data, args=(lock, 'data.txt', f'Process {i}\n'))
processes.append(p)
p.start()
for p in processes:
p.join()
  1. プロセスプール(Pool)を利用する: プロセスポールを作成し、書き込みタスクをプロセスプールに追加して実行する。
import multiprocessing
def write_data(filename, data):
with open(filename, 'a') as file:
file.write(data)
if __name__ == '__main__':
with multiprocessing.Pool(processes=5) as pool:
for i in range(5):
pool.apply_async(write_data, ('data.txt', f'Process {i}\n'))
pool.close()
pool.join()
  1. キユーを使う:プロセスの間で通信するリストを作成し、書き込まれたデータをリストに配置し、あるプロセスがそれをリストから取り出してファイルに書き込む。
import multiprocessing
def write_data(filename, queue):
with open(filename, 'a') as file:
while not queue.empty():
data = queue.get()
file.write(data)
if __name__ == '__main__':
queue = multiprocessing.Queue()
for i in range(5):
queue.put(f'Process {i}\n')
processes = []
for i in range(5):
p = multiprocessing.Process(target=write_data, args=('data.txt', queue))
processes.append(p)
p.start()
for p in processes:
p.join()

いずれの手法を用いる場合でも、ファイルへの書き込み時に競合条件(例えば、2つのプロセスが同時にファイルに書き込む場合)が生じる可能性があることに注意が必要であり、適切な同期機構を用いてデータの完全性と一貫性を保証する必要がある。

bannerAds