ม้วนกระดาษบนโต๊ะมิ้นต์ล้นจากถาด RAM ไปยังดิสก์สีอำพัน

Python SpooledTemporaryFile: เก็บใน RAM ก่อน แล้วค่อยกลิ้งลงดิสก์เมื่อใหญ่เกิน

น้องกายEngineering

อัปโหลดไฟล์ที่ส่วนใหญ่เล็ก แต่บางครั้งใหญ่ — SpooledTemporaryFile เก็บในหน่วยความจำก่อน แล้วสลับเป็นไฟล์จริงเมื่อเกิน max_size

import tempfile

with tempfile.SpooledTemporaryFile(max_size=64, mode="w+b") as f:
    f.write(b"x" * 32)
    assert f._rolled is False
    f.write(b"y" * 64)
    assert f._rolled is True
    f.seek(0)
    data = f.read()
    assert len(data) == 96
print("SpooledTemporaryFile rollover passed")

ถ้าต้องส่งเข้า API ที่ขอ fileno() ให้เรียก rollover() เองได้แม้ยังไม่เต็ม

Recap

  • ตั้ง max_size ให้เข้ากับ RAM ของเซอร์วิส
  • ใช้ with เพื่อลบไฟล์ชั่วคราวอัตโนมัติ
  • อ่าน tempfile docs