← retour aux snippets

multiprocessing.shared_memory: buffers partagés sans copie

Partager des données binaires entre processus via un segment mémoire.

python concurrency #multiprocessing#memory#ipc

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.