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