Loading setup.py +13 −2 Original line number Diff line number Diff line #!/usr/bin/env python3 #!/usr/bin/env python ## ## Project: SharedArray ## Loading @@ -14,5 +14,16 @@ from distutils.core import setup, Extension from glob import glob import os setup(ext_modules = [ Extension("SharedArray", glob("src/*.c")) ]) setup(name = 'SharedArray', description = 'Share numpy arrays between processes', author = 'Mathieu Mirmont', author_email = 'mat@parad0x.org', url = 'http://parad0x.org/git/python/shared-array/', version = '0.0', license = "GPL 2", platforms = "POSIX", ext_modules = [ Extension('SharedArray', glob(os.path.join('src', '*.c')), libraries = [ 'rt' ]) ]) src/shared_array.c +60 −22 Original line number Diff line number Diff line Loading @@ -19,54 +19,92 @@ #include "shared_array.h" #include "shared_array_leon.h" /* Module name */ static const char module_name[] = "SharedArray"; /* Module documentation string */ static const char module_docstring[] = "This module lets you share numpy arrays " "between several python interpreters"; /* * Module functions */ static PyMethodDef module_functions[] = { { "create", (PyCFunction) shared_array_create, METH_VARARGS | METH_KEYWORDS, "Create a numpy array in shared memory" }, METH_VARARGS | METH_KEYWORDS, "Create a numpy array in shared memory" }, { "attach", (PyCFunction) shared_array_attach, METH_VARARGS, "Attach a numpy array from shared memory" }, METH_VARARGS, "Attach an existing numpy array from shared memory" }, { "delete", (PyCFunction) shared_array_delete, METH_VARARGS, "Delete a numpy array from shared memory" }, METH_VARARGS, "Delete an existing numpy array from shared memory" }, { NULL, NULL, 0, NULL } }; #if PY_MAJOR_VERSION >= 3 /* * Module definition */ static struct PyModuleDef module_def = { PyModuleDef_HEAD_INIT, "SharedArray", "This module lets you share numpy arrays between several python interpreters", -1, module_functions, NULL, NULL, NULL, NULL, module_name, /* m_name */ module_docstring, /* m_doc */ -1, /* m_size */ module_functions, /* m_methods */ NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ }; /* Module creation function for python 3 */ #define CREATE_MODULE(NAME, FUNCTIONS, DOCSTRING) \ PyModule_Create(&module_def) #else /* Module creation function for python 2 */ #define CREATE_MODULE(NAME, FUNCTIONS, DOCSTRING) \ Py_InitModule3(NAME, FUNCTIONS, DOCSTRING) #endif /* * Module initialisation */ PyMODINIT_FUNC PyInit_SharedArray(void) static PyObject *module_init(void) { PyObject *m; /* Ready our type */ if (PyType_Ready(&PyLeonObject_Type) < 0) return NULL; /* Import numpy arrays */ import_array(); /* Register our module */ if (!(m = PyModule_Create(&module_def))) /* Register the module */ if (!(m = CREATE_MODULE(module_name, module_functions, module_docstring))) return NULL; /* Register our type */ /* Register the Leon type */ PyType_Ready(&PyLeonObject_Type); Py_INCREF(&PyLeonObject_Type); PyModule_AddObject(m, "SharedArray", (PyObject *) &PyLeonObject_Type); PyModule_AddObject(m, module_name, (PyObject *) &PyLeonObject_Type); /* Import numpy arrays */ import_array(); return m; } /* * Python 2.7 compatibility blob */ #if PY_MAJOR_VERSION >= 3 PyMODINIT_FUNC PyInit_SharedArray(void) { return module_init(); } #else PyMODINIT_FUNC initSharedArray(void) { module_init(); } #endif src/shared_array_attach.c +6 −3 Original line number Diff line number Diff line Loading @@ -48,14 +48,16 @@ static PyObject *do_attach(const char *name) /* Check the meta data */ if (strncmp(meta.magic, SHARED_ARRAY_MAGIC, sizeof (meta.magic))) { close(fd); PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); return NULL; } /* Check the number of dimensions */ if (meta.ndims > SHARED_ARRAY_NDIMS_MAX) { close(fd); PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); return NULL; } Loading @@ -72,7 +74,8 @@ static PyObject *do_attach(const char *name) leon->size = meta.size; /* Create the array object */ ret = PyArray_SimpleNewFromData(meta.ndims, meta.dims, meta.typenum, data + sizeof (meta)); ret = PyArray_SimpleNewFromData(meta.ndims, meta.dims, meta.typenum, data + sizeof (meta)); /* Attach Leon to the array */ PyArray_SetBaseObject((PyArrayObject *) ret, (PyObject *) leon); Loading src/shared_array_create.c +2 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,8 @@ static PyObject *do_create(const char *name, int ndims, npy_intp *dims, PyArray_ /* Internal limitation */ if (ndims > SHARED_ARRAY_NDIMS_MAX) { PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); return NULL; } Loading src/shared_array_delete.c +2 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,8 @@ static PyObject *do_delete(const char *name) /* Check the meta data */ if (strncmp(meta.magic, SHARED_ARRAY_MAGIC, sizeof (meta.magic))) { PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); return NULL; } Loading Loading
setup.py +13 −2 Original line number Diff line number Diff line #!/usr/bin/env python3 #!/usr/bin/env python ## ## Project: SharedArray ## Loading @@ -14,5 +14,16 @@ from distutils.core import setup, Extension from glob import glob import os setup(ext_modules = [ Extension("SharedArray", glob("src/*.c")) ]) setup(name = 'SharedArray', description = 'Share numpy arrays between processes', author = 'Mathieu Mirmont', author_email = 'mat@parad0x.org', url = 'http://parad0x.org/git/python/shared-array/', version = '0.0', license = "GPL 2", platforms = "POSIX", ext_modules = [ Extension('SharedArray', glob(os.path.join('src', '*.c')), libraries = [ 'rt' ]) ])
src/shared_array.c +60 −22 Original line number Diff line number Diff line Loading @@ -19,54 +19,92 @@ #include "shared_array.h" #include "shared_array_leon.h" /* Module name */ static const char module_name[] = "SharedArray"; /* Module documentation string */ static const char module_docstring[] = "This module lets you share numpy arrays " "between several python interpreters"; /* * Module functions */ static PyMethodDef module_functions[] = { { "create", (PyCFunction) shared_array_create, METH_VARARGS | METH_KEYWORDS, "Create a numpy array in shared memory" }, METH_VARARGS | METH_KEYWORDS, "Create a numpy array in shared memory" }, { "attach", (PyCFunction) shared_array_attach, METH_VARARGS, "Attach a numpy array from shared memory" }, METH_VARARGS, "Attach an existing numpy array from shared memory" }, { "delete", (PyCFunction) shared_array_delete, METH_VARARGS, "Delete a numpy array from shared memory" }, METH_VARARGS, "Delete an existing numpy array from shared memory" }, { NULL, NULL, 0, NULL } }; #if PY_MAJOR_VERSION >= 3 /* * Module definition */ static struct PyModuleDef module_def = { PyModuleDef_HEAD_INIT, "SharedArray", "This module lets you share numpy arrays between several python interpreters", -1, module_functions, NULL, NULL, NULL, NULL, module_name, /* m_name */ module_docstring, /* m_doc */ -1, /* m_size */ module_functions, /* m_methods */ NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ }; /* Module creation function for python 3 */ #define CREATE_MODULE(NAME, FUNCTIONS, DOCSTRING) \ PyModule_Create(&module_def) #else /* Module creation function for python 2 */ #define CREATE_MODULE(NAME, FUNCTIONS, DOCSTRING) \ Py_InitModule3(NAME, FUNCTIONS, DOCSTRING) #endif /* * Module initialisation */ PyMODINIT_FUNC PyInit_SharedArray(void) static PyObject *module_init(void) { PyObject *m; /* Ready our type */ if (PyType_Ready(&PyLeonObject_Type) < 0) return NULL; /* Import numpy arrays */ import_array(); /* Register our module */ if (!(m = PyModule_Create(&module_def))) /* Register the module */ if (!(m = CREATE_MODULE(module_name, module_functions, module_docstring))) return NULL; /* Register our type */ /* Register the Leon type */ PyType_Ready(&PyLeonObject_Type); Py_INCREF(&PyLeonObject_Type); PyModule_AddObject(m, "SharedArray", (PyObject *) &PyLeonObject_Type); PyModule_AddObject(m, module_name, (PyObject *) &PyLeonObject_Type); /* Import numpy arrays */ import_array(); return m; } /* * Python 2.7 compatibility blob */ #if PY_MAJOR_VERSION >= 3 PyMODINIT_FUNC PyInit_SharedArray(void) { return module_init(); } #else PyMODINIT_FUNC initSharedArray(void) { module_init(); } #endif
src/shared_array_attach.c +6 −3 Original line number Diff line number Diff line Loading @@ -48,14 +48,16 @@ static PyObject *do_attach(const char *name) /* Check the meta data */ if (strncmp(meta.magic, SHARED_ARRAY_MAGIC, sizeof (meta.magic))) { close(fd); PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); return NULL; } /* Check the number of dimensions */ if (meta.ndims > SHARED_ARRAY_NDIMS_MAX) { close(fd); PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); return NULL; } Loading @@ -72,7 +74,8 @@ static PyObject *do_attach(const char *name) leon->size = meta.size; /* Create the array object */ ret = PyArray_SimpleNewFromData(meta.ndims, meta.dims, meta.typenum, data + sizeof (meta)); ret = PyArray_SimpleNewFromData(meta.ndims, meta.dims, meta.typenum, data + sizeof (meta)); /* Attach Leon to the array */ PyArray_SetBaseObject((PyArrayObject *) ret, (PyObject *) leon); Loading
src/shared_array_create.c +2 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,8 @@ static PyObject *do_create(const char *name, int ndims, npy_intp *dims, PyArray_ /* Internal limitation */ if (ndims > SHARED_ARRAY_NDIMS_MAX) { PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); PyErr_SetString(PyExc_RuntimeError, "Too many dimensions, recompile SharedArray!"); return NULL; } Loading
src/shared_array_delete.c +2 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,8 @@ static PyObject *do_delete(const char *name) /* Check the meta data */ if (strncmp(meta.magic, SHARED_ARRAY_MAGIC, sizeof (meta.magic))) { PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); PyErr_SetString(PyExc_RuntimeError, "No SharedArray at this address"); return NULL; } Loading