디스크에 저장된 데이터를 메모리에 매핑시켜주는 기능을 제공합니다.
이를 통해, 파일에서 데이터를 읽고 쓰는 과정에서 발생하는 I/O 오버헤드를 줄일 수 있습니다.
mmap 모듈은 파이썬에서 메모리 매핑(memory mapping)을 수행하는 모듈입니다.
메모리 매핑은 파일이나 기타 객체의 일부를 메모리에 매핑하여 읽고 쓸 수 있도록 해주는 기술입니다.
메모리 매핑은 매우 큰 파일이나 네트워크 연결, 빅 데이터 처리 등에서 매우 유용합니다.
mmap 모듈의 mmap() 함수는 파일이나 기타 객체를 메모리에 매핑하는 함수입니다.
메모리 매핑된 데이터를 수정하면, 매핑된 파일이나 객체도 함께 수정됩니다.
예시로, 다음과 같이 파일을 열고 mmap() 함수를 사용하여 파일의 내용을 메모리에 매핑할 수 있습니다.
import mmap
# 파일 열기
with open("file.txt", "r+") as f:
# 파일 내용 메모리 매핑
#
mm = mmap.mmap(f.fileno(), 0)
# 매핑된 데이터 읽기
data = mm.readline()
print(data)
# 매핑된 데이터 수정
mm[0] = b"X"
# 매핑된 데이터 쓰기
mm.write(b"Hello World")
# 메모리 매핑 종료
mm.close()
f.fileno()는 파일 객체 f의 파일 디스크립터(file descriptor)를 반환하는 메서드입니다.
파일 디스크립터는 파일을 식별하기 위한 유일한 정수값으로, 파일 시스템에서 파일을 관리하기 위해 사용됩니다.
파일 디스크립터는 일반적으로 파일을 열 때 운영체제에서 할당됩니다.
따라서 파일을 열 때마다 파일 디스크립터는 다른 값이 됩니다.
fileno() 메서드를 사용하면 파일 객체의 파일 디스크립터를 가져올 수 있으며, 이를 이용하여 파일의 데이터를 다룰 수 있습니다.
예를 들어, mmap 모듈에서 mmap() 함수는 파일 디스크립터를 이용하여 파일의 데이터를 메모리에 매핑합니다.
fileno() 메서드는 파일 객체가 닫혀 있지 않은 경우에만 사용할 수 있습니다.
따라서, 파일을 사용한 후에는 반드시 close() 메서드로 파일 객체를 닫아주어야 합니다.
파일 객체가 닫힌 이후에는 fileno() 메서드를 호출할 수 없으며, ValueError 예외가 발생합니다.