¿Bloquear la lista de solo lectura en Python?

He hecho algunos puntos de referencia básicos de rendimiento y consumo de memoria y me preguntaba si hay alguna manera de hacer las cosas aún más rápido ...

Tengo una lista gigante de 70,000 elementos con un ndarray numpy, y la ruta del archivo en una tupla en dicha lista.

Mi primera versión pasó una copia cortada de la lista a cada uno de los procesos en el módulo multiproceso de Python, pero explotaría el uso de RAM a más de 20 Gigabytes

La segunda versión lo moví al espacio global y accedo a él a través de un índice como foo [i] en un bucle en cada uno de mis procesos que parece colocarlo en un área de memoria compartida / semántica de vaca con los procesos para que no explote El uso de memoria (Estancias a ~ 3 Gigabytes)

Sin embargo, de acuerdo con los puntos de referencia / seguimiento del rendimiento, parece que la gran mayoría del tiempo de aplicación ahora se pasa en modo "adquirir" ...

Entonces, me preguntaba si hay alguna manera de convertir de alguna manera esta lista en algún tipo de bloqueo / lectura solo para poder eliminar parte del paso de adquisición para ayudar a acelerar el acceso aún más.

Editar 1: Aquí están los primeros resultados de la línea de perfiles de la aplicación.

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   65 2450.903   37.706 2450.903   37.706 {built-in method acquire}
39320    0.481    0.000    0.481    0.000 {method 'read' of 'file' objects}
  600    0.298    0.000    0.298    0.000 {posix.waitpid}
   48    0.271    0.006    0.271    0.006 {posix.fork}

Edición 2: Aquí hay un ejemplo de la estructura de la lista:

# Sample code for a rough idea of how the list is constructed
sim = []
for root, dirs, files in os.walk(rootdir):
    path = os.path.join(root, filename)
    image= Image.open(path)
    np_array = np.asarray(image)
    sim.append( (np_array, path) )

# Roughly it would look something like say this below
sim = List( (np.array([[1, 2, 3], [4, 5, 6]], np.int32), "/foobar/com/what.something") )

Entonces, en adelante, la lista SIM debe ser de solo lectura.

Respuestas a la pregunta(1)

Su respuesta a la pregunta