python mmap 예제

두 개체의 내부 상태가 별도로 유지되므로 이 예제에서 파일 핸들을 mmap 핸들과 별도로 되감아야 합니다. (윈도우 버전) 파일 핸들 fileno에 의해 지정된 파일에서 길이 바이트를 매핑하고 mmap 개체를 만듭니다. 길이가 파일의 현재 크기보다 크면 파일이 길이 바이트를 포함하도록 확장됩니다. 길이가 0이면 파일이 비어 있는 경우 Windows에서 예외가 발생한다는 점을 제외하면 맵의 최대 길이는 파일의 현재 크기입니다(Windows에서 빈 매핑을 만들 수 없음). 파일 포인터는 슬라이스 작업을 통해 액세스한 마지막 바이트를 추적합니다. 이 예제에서 포인터는 첫 번째 읽기 후 10바이트 앞으로 이동합니다. 그런 다음 슬라이스 작업에 의해 파일의 시작 부분으로 재설정되고 슬라이스에 의해 다시 10바이트 앞을 이동합니다. 슬라이스 연무 후 read()를 호출하면 파일에서 바이트 11-20이 다시 표시됩니다. 메모리 매핑된 파일은 문자열처럼 작동할 수 있으므로 정규식과 같은 문자열에서 작동하는 다른 모듈과 함께 사용할 수 있습니다. 이 예제에서는 “nulla”가 있는 모든 문장을 찾습니다. 레시피는 mmap을 사용하여 두 프로세스가 서로 대화할 수 있는 방법을 매우 간단하게 보여줍니다. 기본적으로 파이썬의 mmap 모듈을 사용하여 메모리 매핑된 파일 개체는 일반 파일 개체를 메모리에 매핑합니다. 이렇게 하면 메모리에서 직접 파일 개체의 내용을 수정할 수 있습니다.

메모리 매핑된 파일 개체도 변경 가능한 문자열 개체처럼 실행되므로 문자 목록의 내용을 수정하는 것처럼 파일 개체의 내용을 수정할 수 있습니다. 그러나 일반 문자열 개체와 달리 이러한 개체는 변경할 수 있습니다. 문자열이 예상되는 대부분의 위치에서 mmap 개체를 사용할 수 있습니다. 예를 들어 re 모듈을 사용하여 메모리 매핑된 파일을 검색할 수 있습니다. 변경 가능하기 때문에 obj[index] = `a`를 수행하여 단일 문자를 변경하거나 슬라이스에 할당하여 하위 문자열을 변경할 수 있습니다. 또한 현재 파일 위치에서 시작하여 데이터를 읽고 쓰고 파일을 통해 다른 위치로 검색할 수도 있습니다. 보시다시피 mmap_process.py는 normal_process.py에서 파일 시스템 호출을 사용하여 수행되는 동안 검색 함수 호출이 mmap_process.py의 메모리에 대해 직접 수행되기 때문에 평균 적으로 normal_process.py보다 약 17% 빠릅니다. 파이썬에서 프로세스가 서로 이야기 할 수있는 다른 방법이 얼마나 많은지 볼 것입니다.

문자열의 바이트를 파일 포인터의 현재 위치에서 메모리에 씁니다. 파일 위치가 작성된 바이트 다음으로 가리키도록 업데이트됩니다. access_READ를 사용하여 mmap을 만든 경우 mmap에 쓰는 경우 TypeError 예외가 발생합니다. mmap()에 대한 두 번째 인수는 매핑할 파일 부분에 대한 바이트 크기입니다. 값이 0이면 전체 파일이 매핑됩니다. 크기가 파일의 현재 크기보다 크면 파일이 확장됩니다. 맵과 기본 파일(있는 경우)의 크기를 조정합니다.