2011-03-24 3 views
1

텍스트 파일로 /로부터 데이터를 읽거나 쓰는 멀티 스레딩입니다. 이 실제 파일을 대체하지 않고이 파일에서 텍스트를 바꾸거나 제거 할 수 있어야합니다.다른 스레드가 파일을 읽는 동안 파일을 어떻게 수정할 수 있습니까?

문자열에 .read()을 간단히 입력 할 수없고, 다른 스레드가 해당 파일을 계속 사용하고 있기 때문에 같은 이름의 새 파일을 .write()으로 만들 수는 없습니다. 스레드가 .read() 파일에서해야하기 때문에 나는 다른 파일에 .write() 수 없습니다.

이것이 가능합니까?

여기에 file.replace() 또는 file.remove() 또는 file.delete()과 (과) 비슷한 항목이 있습니까?

+3

하나의 쓰기 스레드 (및 다중 읽기 스레드)가 있습니까? 왜 그것은 파일 이어야만합니까 (인 메모리 객체와 반대되는)? 동시 액세스가 훨씬 쉬운 데이터베이스를 사용할 수 없습니까? –

+0

이것이 스레드로부터 안전 할 것이라고 확신 할 수는 없지만 mmap은 사용자의 관심사와 관련이있는 것처럼 보입니다. 한 가지 문제는 .read()를 사용하면 더 이상 불이 들어 있지 않은 문자열 데이터를 가져 오는 것입니다. http://docs.python.org/release/3.2/library/mmap.html –

답변

2

나쁜 생각. 파일을 쓰거나 읽을 책임이있는 다른 스레드를 사용하십시오. 또는 너무 크지 않은 경우 파일을 메모리로 읽어들입니다.

1

확실히 가능하지만, 파일을 독창적으로 읽고 쓰는 경우에만 유용합니다. 유니폼을 말할 때 파일을 데이터 블록으로 취급해야합니다. 마찬가지로 모든 4096 바이트는 블록이며 각 블록에서 필요한 것을 수행 할 수 있습니다. 이렇게하지 않으면 데이터가있는 위치의 오프셋을 추적하고 프로그램을 관리하기가 더 어려워집니다.

그런 다음 파일 I/O에 임의 액세스 기능을 사용할 수 있습니다. 파일의 다른 오프셋으로 이동하는 및 현재 오프셋을 알리는 tell()과 같은 기능이 있습니다. 그런 다음 현재 위치에서 읽거나 쓸 수 있습니다. 기본적으로 그것이 무엇인지 기억하기 때문에 그것을 생각하십시오.

file.remove(), file.replace(), file.delete() 기능의 존재 여부 또는 내가하는 일에 도움이되는 방법에 대해 무엇을 묻고 있는지 잘 모르겠습니다. 그것은 목적을 이깁니다.

Readers-writers problem에 대한 자세한 내용을 읽고 어떻게 동기화 할 수 있는지 알아보십시오.

관련 문제