Python 은 mmap 를 사용 하여 메모리 맵 파일 작업 을 수행 합 니 다.

머리말
메모리 맵 은 보통 I/O 의 성능 을 향상 시 킬 수 있 습 니 다.메모리 맵 을 사용 할 때 모든 접근 에 대해 하나의 시스템 호출 을 만 들 필요 도 없고 버퍼 사이 에 데 이 터 를 복사 할 필요 도 없습니다.커 널 과 사용자 가 편리 하 게 메모리 에 직접 접근 할 수 있 습 니 다.
설명 하 다.
1)맵 이란 무엇 입 니까?
==>한 대상(변수,물리 등 일 수 있 음)에 게 유일한 별명 을 지어 일일이 대응 하 는 관 계 를 맺 는 것 이다.
2)파일 맵:디스크 에 있 는 파일 의 위 치 를 프로 세 스 논리 주소 공간 에서 크기 가 같은 영역 과 일일이 대응 합 니 다.
3)매 핑 후 배열 형식 과 유사 한 것(mmap.mmap()대상 을 얻 을 수 있 습 니 다.배열 과 유사 한 방식 으로 파일 내용 을 변경 하 는 목적 을 달성 할 수 있 습 니 다.
장점.
1)바 이 너 리 파일 에 대한 결함
보통 파일 을 읽 고 쓸 때 read()와 write()방법 을 사용 합 니 다.이 두 가지 방법 은 모두 흐 르 는 형식 으로 이 루어 집 니 다.즉,하나의 바이트 가 한 바이트 에 이 어 읽 고 쓰 는 것 입 니 다.어느 위치 에서 부터 읽 고 쓰 려 면 seek()방법 으로 파일 포인 터 를 조정 합 니 다.이 방법 은 바 이 너 리 파일 에 대한 조작 이 매우 불편 합 니 다.바 이 너 리 파일 에 비해 데 이 터 를 파일 에 기록 할 때 배열 형식 으로 데 이 터 를 매 핑 한 다음 배열 에 접근 하 는 형식 으로 파일 에 접근 하고 파일 을 수정 한 후,이 배열 을 통 해 데 이 터 를 파일 에 다시 동기 화 할 수 있 습 니 다.
2)일부 내장 장치,레지스터 는 메모리 주소 공간 에 주소 가 지정 되 어 있 습 니 다.우 리 는/dev/mem 의 특정한 범 위 를 매 핑 하여 이 레지스터 에 접근 할 수 있 습 니 다.
예 를 들 어 크 랜 베 리 파(컴퓨터 프로 그래 밍 교육 을 배우 기 위 한 마이크로컴퓨터)에 Pwm 파형 발생 기 가 있 는데 이 발생 기 를 사용 하려 면 크 랜 베 리 파 의 레지스터 를 방문 해 야 한다.실제로 레지스터 는 물리 적 주소 의 특정한 공간 이다.이 때 레지스터 에 접근 하려 면/dev/mem 의 한 범 위 를 메모리 에 표시 하고 메모리 에 접근 하 는 방식 으로 레지스터 에 접근 해 야 합 니 다.
3)여러 프로 세 스 가 같은 파일 을 비 추 면 프로 세 스 통신 의 목적 을 실현 할 수 있다.
여러 프로 세 스 가 같은 파일 을 각자 의 메모리 공간 에 비 추 었 습 니 다.실제로 같은 보 기 를 보 았 고 프로 세 스 통신 의 목적 도 실현 할 수 있 습 니 다. 
이 편 은 Python 메모리 맵 라 이브 러 리:mmap 를 자세히 소개 합 니 다.
mmap(파일 읽 기)
mmap()함 수 를 사용 하면 메모리 맵 파일 을 만 들 수 있 습 니 다.이 함수 의 첫 번 째 매개 변 수 는 파일 설명자 로 file 대상 의 fileno()함수 로 가 져 올 수 있 습 니 다.두 번 째 매개 변 수 는 매 핑 할 파일 부분 크기(단위 바이트)입 니 다.이 값 이 0 이면 전체 파일 을 매 핑 합 니 다.이 매개 변수 가 파일 크기 보다 크 면 이 파일 을 확장 합 니 다.
예 는 다음 과 같다.

import mmap

with open('    .txt','r') as f:
    with mmap.mmap(f.fileno(),0,access=mmap.ACCESS_READ) as m:
        print(m.read(10))
        print(m.read(10))
        print(m[:-10])
실행 후 효 과 는 다음 과 같 습 니 다.
输出
여기 서 읽 기와 쓰 기 는 파일 포인터 에 따라 이동 합 니 다.예 를 들 어 10 개의 문 자 를 읽 기 시작 하면 두 번 째 로 읽 으 면 11 개의 문 자 를 읽 기 시작 하고 출발점 으로 돌아 가지 않 으 며 절편 이나 seek()함 수 를 통 해 포인터 를 초기 화 할 수 있 습 니 다.
access 매개 변 수 는 어떤 방식 으로 접근 하 는 지,여 기 는 읽 는 방식 입 니 다.
특히 windows 는 길이 가 0 인 맵 을 만 드 는 것 을 지원 하지 않 습 니 다.
쓰기(파일 쓰기)
파일 을 쓰 는 것 이 비교적 간단 합 니 다.여기 서 우 리 는 코드 를 직접 봅 니 다.

import mmap

word = b'The'

with open('    .txt', 'r+') as f:
    with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_WRITE) as m:
        loc = m.find(word)
        m[loc:loc + len(word)] = b'lyj'
        print(m.read())
실행 후 이니셜 The 는 우리 에 의 해"lyj"로 바 뀌 었 습 니 다.효 과 는 다음 과 같 습 니 다.
追加
물론 절편 기록 외 에 write()등 파일 조작 방법 으로 도 작업 할 수 있 으 며 파일 작업 과 마찬가지 입 니 다.주의해 야 할 것 은 access 가 ACCESS 와 같다 면COPY,그러면 수 정 된 내용 을 디스크 에 있 는 파일 에 쓰 지 않 습 니 다.
파 이 썬 이 mmap 를 사용 하여 메모리 맵 파일 작업 을 수행 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 메모리 맵 파일 작업 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기