Skip to content

yuyang0/pyshm

Repository files navigation

pyshm - Python share memory library

Build Status PyPI version pyversions License

pyshm is a python library that used to pass memory block between multiple processes. it exports three modules:

  1. shm: mainly used to create share memory between multiple process(using mmap)
  2. mempool: A memory pool is an allocator of fixed-size memory blocks. In python memory block is represented as a buffer-like object.
  3. ring: lockless FIFO queue in share memory. user can use Ring to manage the memory blocks allocated from Mempool

installation and usage

you can install pyshm using setuptools or pip:

pip install pyshm

or:

python setup.py install

usage

  1. create share memory

    from pyshm import ShareMem
    
    test_shm = ShareMem(64*1024*1024) # 64M
    

    pls note: these code should execute before fork

  2. using mempool

    from pyshm import mempool
    count = 4
    mp = mempool.Mempool(count, 4, shm=test_shm)
    
    pid = os.fork()
    if pid == 0:
        for i in range(count):
            buf = mp.get()
            struct.pack_into("=i", buf, 0, i)
            mp.put(buf)
    else:
        cid, status = os.wait()
        assert pid == cid
        for i in range(count):
            buf = mp.get()
            v, = struct.unpack_from("=i", buf)
            assert v == i
        mp.cleanup()
    

    get used to get memory block(a buffer-like object), put returns the memory block to the mempool

  3. using ring: ring can used to pass the memory block(get from mempool) to the other process. it proviod enqueue and dequeue, one process enequeue and the other process dequeue

About

python share memory library

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published