Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Memory-mapped File Support ใน Python (mmap)


บทนำ

mmap (Memory-mapped file) แมปไฟล์เข้าหน่วยความจำ เข้าถึง/แก้ไขไฟล์เหมือน byte array ใน RAM เร็วกว่าการอ่าน/เขียนไฟล์ปกติสำหรับไฟล์ขนาดใหญ่

1. อ่านไฟล์ด้วย mmap

import mmap

def read_mmap(filename):
    with open(filename, "r", encoding="utf-8") as f:
        with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm:
            print(mm[4:26])  # อ่าน byte 4-25
            print(mm.readline())  # อ่านบรรทัด
            print(mm.find(b"keyword"))  # ค้นหา

2. เขียนไฟล์ด้วย mmap

def write_mmap(filename):
    with open(filename, "r+") as f:
        with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_WRITE) as mm:
            mm[20:26] = b"Hello!"  # เขียนทับ byte 20-25
            mm.flush()  # บังคับเขียนลงดิสก์

3. เปรียบเทียบประสิทธิภาพ: mmap vs Regular I/O

import time

def regular_find(filename, keyword):
    with open(filename, "r") as f:
        return f.read().find(keyword)

def mmap_find(filename, keyword):
    with open(filename, "r") as f:
        with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm:
            return mm.find(keyword.encode())

# ทดสอบกับไฟล์ขนาดใหญ่
# mmap เร็วกว่ามากสำหรับการค้นหา/อ่านแบบสุ่ม

Access Modes

Modeคำอธิบาย
ACCESS_READอ่านอย่างเดียว
ACCESS_WRITEอ่าน/เขียน (เปลี่ยนแปลงลงดิสก์)
ACCESS_COPYอ่าน/เขียนในหน่วยความจำอย่างเดียว (ไม่บันทึกลงดิสก์)

ข้อควรระวัง

  • ไฟล์ต้องมีอยู่แล้ว (mmap ไม่สร้างไฟล์ใหม่)
  • บน Windows: ไม่สามารถ mmap ไฟล์เปิดอยู่ที่อื่นได้
  • ใช้ flush() เพื่อให้แน่ใจว่าเขียนลงดิสก์แล้ว