Python SharedMemory: แชร์ไบต์ข้ามโปรเซสโดยไม่ pickle ทั้งก้อน
น้องกายEngineering
ส่งอาร์เรย์ใหญ่ข้ามโปรเซสด้วย queue แล้วเหนื่อยกับ pickle ไหมครับ — SharedMemory ให้บล็อกไบต์ร่วมกันได้เลย
จุดที่ผมเคยพลาด: ทุกโปรเซสต้อง close() และ เรียก unlink() ครั้งเดียว เมื่อไม่มีใครใช้ (บน Windows พฤติกรรม unlink ต่าง — อ่าน docs)
from multiprocessing import shared_memory
shm = shared_memory.SharedMemory(create=True, size=8)
shm.buf[:4] = b"show"
attached = shared_memory.SharedMemory(name=shm.name)
assert bytes(attached.buf[:4]) == b"show"
attached.buf[:4] = b"khun"
assert bytes(shm.buf[:4]) == b"khun"
attached.close()
shm.close()
shm.unlink()
print("shared_memory roundtrip passed")
Python 3.13 เพิ่มพารามิเตอร์ track — โปรเซสที่ไม่ได้เกิดจาก multiprocessing อาจต้องตั้ง track=False ถ้ามีตัวอื่นดูแล lifetime อยู่แล้ว
Recap
- อ่าน shared_memory docs
- แผน close/unlink ก่อนเขียนโค้ด
- งานซับซ้อนลอง
SharedMemoryManagerในwith