How do I write functions to be imported in other parts of the code so I can initialize and/or load a shared array? I don't need it to be super fancy atm so I'm trying this simple approach:
# functions.py import numpy as np from multiprocessing.shared_memory import SharedMemory def init_shared_array(shape, dtype, name): zeros = np.zeros(shape, dtype=dtype) shm = SharedMemory(create=True, size=zeros.nbytes, name=name) shared_array = np.ndarray(shape, dtype=dtype, buffer=shm.buf) shared_array[:] = zeros[:] return name def load_shared_array(shape, dtype, name): shm = SharedMemory(create=False, name=name) shared_array = np.ndarray(shape, dtype=dtype, buffer=shm.buf) return shared_array # main.py from functions import init_shared_array, load_shared_array shape = (1,) dtype = int name = 'MySharedArray' init_shared_array(shape, dtype, name) shared_array = load_shared_array(shape, dtype, name) # I'll run this line on other files to I wasn't expecting it to fail, but it does when loading the array, with a warning UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up followed by an error Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
One curious thing I noticed is that if instead of calling the load_shared_array method I just replace it with its code, then the program works:
# main.py import numpy as np from multiprocessing.shared_memory import SharedMemory from functions import init_shared_array, load_shared_array shape = (1,) dtype = int name = 'MySharedArray' init_shared_array(shape, dtype, name) shm = SharedMemory(create=False, name=name) shared_array = np.ndarray(shape, dtype=dtype, buffer=shm.buf) # works well