반응형

 

동시에 여러 프로세스가 같은 파일에 접근해서 write하는 작업이 발생하면 파일이 덮어씌워질수도 있다.

그래서 파일에 락을 걸고 작업을 한다는 내용을 운영체제 공부하면서 들었고

작업하면서 얼핏 생각나서 파이썬에서 적용해봤다

 

뮤텍스, 세마포어 용어는 기억나는데 뭔지는 잘 모른다..ㅋㅋ 운영체제 다시 공부해야지

 

사실 실제로 쓰기 작업할 땐 락이 걸렸다가 처리 후에 락이 풀린건지는

확인을 못해봤지만 파일 내용을 봤을 때 결과는 잘 떨어졌다.!!

 

 

동시에 10개 프로세스가 돌고

그 10개가 어떠한 작업을 한 후  

같은 csv파일에 그에 관한 내용이 한줄씩 추가된다.

이걸 무한 반복한다.

 

멀티 프로세스라서 어느 순간은 파일이 겹치는 경우가 있을 수 있다고 생각했다

 

 

 

fcntl 라이브러리를 사용하여 설정했다

락 푸는건 에러가 나도 풀려야하기 때문에 finally문에 적어줬다

import csv
import fcntl

new_data = [['a', 'b', 'c'], ...]

with open('example.csv', mode='a') as file:
    # 파일 잠금
    fcntl.flock(file, fcntl.LOCK_EX)
    try:
        writer = csv.writer(file)
        writer.writerow(new_data)  # 데이터 추가
    finally:
        # 파일 잠금 해제
        fcntl.flock(file, fcntl.LOCK_UN)

 

 

 

물론 실제 코드는 여기 앞에 파일이 존재하는지 체크도 하고

코드가 길지만 예제로 나중에 활용하기 좋게 작성했다

 

반응형
복사했습니다!