https://github.com/yuyang0/pyshm
python share memory library
https://github.com/yuyang0/pyshm
mempool python-memory ring
Last synced: about 1 month ago
JSON representation
python share memory library
- Host: GitHub
- URL: https://github.com/yuyang0/pyshm
- Owner: yuyang0
- License: bsd-2-clause
- Created: 2017-09-27T07:51:49.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-09-29T02:40:16.000Z (over 8 years ago)
- Last Synced: 2025-09-22T20:15:02.648Z (5 months ago)
- Topics: mempool, python-memory, ring
- Language: C
- Homepage:
- Size: 28.3 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
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``
.. |Build Status| image:: https://travis-ci.org/yuyang0/pyshm.svg?branch=master
:target: https://travis-ci.org/yuyang0/pyshm
.. |PyPI version| image:: https://badge.fury.io/py/pyshm.svg
:target: https://pypi.python.org/pypi/pyshm
.. |pyversions| image:: https://img.shields.io/badge/python-2.7,3.5,3.6,pypy-blue.svg
:target: https://pypi.python.org/pypi/pyshm
.. |License| image:: https://img.shields.io/badge/License-BSD%202--Clause-orange.svg
:target: https://opensource.org/licenses/BSD-2-Clause