Multiprocessing is not needed when all of your handful subprocesses are just calling Numpy-code and release their gil anyways.
Also some/most Numpy functions are multithreaded (depending on the BLAS implementation, linked against), take advantage of that and schedule huge operations and just let the interpreter sit idle waiting for that result.