2013-04-10 4 views
0

파일 (writeThread)에 주기적으로 쓰는 스레드와 파일에서 비동기 적으로 읽는 스레드 (readThread)가 있습니다. readThread는 다른 핸들을 사용하여 파일에 액세스 할 수 있습니까?스레드간에 파이썬 공유 파일 액세스

그렇지 않으면 python에 writeThread에서 사용할 수 있지만 readThread를 차단하지 않은 공유 잠금이 있습니까? 파일 액세스가 밀리 초의 순서를 취하고 writeThread 쓰기 기간이 같은 순서 (주기가 일부 외부 매개 변수에 달려 있음)이기 때문에 간단한 비공유 잠금을 선호하지 않습니다. 따라서 writeThread가 잠금을 해제하더라도 즉시 잠금을 다시 획득하여 기아가 발생할 수있는 상황이 발생할 수 있습니다.

내가 생각할 수있는 해결책은 파일의 여러 복사본을 유지하는 것입니다. 하나는 읽기 용이고 다른 하나는 쓰기 용이며 전체 상황을 모두 피하는 것입니다. 그러나 관련된 파일 크기가 커질 수 있으므로이 방법은 바람직하지 않습니다.

다른 대안이 있습니까? 아니면 나쁜 디자인입니까?

감사

답변

0

예, 파일을 여러 번 열고 독립적 액세스 할 수 있습니다. 각 파일 객체는 자신의 버퍼와 위치를 가지므로 하나를 찾으면 다른 하나는 엉망이되지 않습니다. 여러 프로그램 액세스와 거의 비슷하게 작동하며 파일의 동일한 영역을 읽거나 쓸 때주의해야합니다. 예를 들어, 파일 끝에 추가되는 쓰기는 쓰기 오브젝트가 플러시 될 때까지는 독자가 볼 수 없습니다. 리더와 작가가 모두 플러시 할 때까지 기존 데이터를 다시 쓰지 않습니다. 쓰기는 원자 적이지 않으므로 레코드를 쓰는 경우 독자는 부분 레코드를 볼 수 있습니다. 비동기 독자의 선택 이벤트 또는 폴링 이벤트가 펑키 할 수 있습니다.

대체 방법은 mmap이지만 사용법을 알기에는 충분하지 않았습니다.

관련 문제