Access numpy array from separate C process using shared memory Access numpy array from separate C process using shared memory numpy numpy

Access numpy array from separate C process using shared memory


Here is a minimal example:

Python

import osimport posix_ipcimport numpy as npx = np.arange(1000, dtype='i4')f = posix_ipc.SharedMemory('test', flags=posix_ipc.O_CREAT, size=x.nbytes, read_only=False)ff = os.fdopen(f.fd, mode='wb')ff.write(x.data)ff.close()  # flush doesn't work, but this does.

C

// shm.c#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <sys/mman.h>int main(int argc, char *argv[]){    int i, fd;    int *data;    fd = shm_open("test", O_RDONLY, 0);    if (fd == -1)        printf("Error!, bad file desciptor");    data = mmap(NULL, sizeof(int), PROT_READ, MAP_PRIVATE, fd, 0);    if (data == MAP_FAILED)        printf("Error!, map failed!");    for(i = 0; i < 1000; i++){        printf("%d, ", (int)data[i]);    }    return 0;}$ gcc shm.c -lrt -o shm$ ./shm 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...