Just a follow-up: it worked! I was able to use multiple works with shared arrays. However, not only was there no improvement in training time, it would be slightly slower.
The code I used:
import multiprocessing as mp
import ctypes
import numpy as np

def create_shared_np_float(value, args):
    shared_array_base = mp.Array(ctypes.c_float, int(np.prod(args))) 
    shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
    shared_array = shared_array.reshape(*args)
    shared_array.fill(value)
    return shared_array

def create_shared_np_int(value, args):
    shared_array_base = mp.Array(ctypes.c_int, int(np.prod(args))) 
    shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
    shared_array = shared_array.reshape(*args)
    shared_array.fill(value)
    return shared_array