Numpy operations release the GIL (usually at least) so you can use a threadpool and, indeed, share memory. Just try it and you may be pleasantly surprised.
Dask is great if you’re processing large amounts of data, and it recommends and supports threads for this reason.