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 를 사용 하여 메모리 맵 파일 작업 을 수행 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 메모리 맵 파일 작업 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.