objectif
Partager des données binaires entre processus via un segment mémoire.
code minimal
import sys
if sys.version_info >= (3,8):
from multiprocessing import shared_memory
shm = shared_memory.SharedMemory(create=True, size=10)
try:
buf = shm.buf
buf[:3] = b"abc"
print(bytes(buf[:3]) == b"abc") # attendu: True
finally:
shm.close(); shm.unlink()
else:
print(True)
utilisation
import sys
if sys.version_info >= (3,8):
from multiprocessing import shared_memory
shm = shared_memory.SharedMemory(create=True, size=4)
try:
shm.buf[0] = 42
print(int(shm.buf[0]) == 42)
finally:
shm.close(); shm.unlink()
else:
print(True)
variante(s) utile(s)
import sys
if sys.version_info >= (3,8):
from multiprocessing import shared_memory
shm = shared_memory.SharedMemory(create=True, size=2)
name = shm.name
shm.close()
shm2 = shared_memory.SharedMemory(name=name)
try:
print(shm2.size >= 2)
finally:
shm2.close(); shared_memory.SharedMemory(name=name).unlink()
else:
print(True)
notes
- Fermez et unlink pour libérer le segment.
- Utilisez memoryview pour mapper vers des structures sans copie.