Bloquear somente leitura livre Lista em Python?

Eu fiz alguns benchmarks básicos de desempenho e consumo de memória e fiquei pensando se há alguma maneira de tornar as coisas ainda mais rápidas ...

Eu tenho uma lista gigante de 70.000 elementos com um ndarray numpy e o caminho do arquivo em uma tupla na referida lista.

Minha primeira versão passou uma cópia fatiada da lista para cada um dos processos no módulo multiprocesso python, mas explodiria o uso de memória ram para mais de 20 Gigabytes

A segunda versão, mudei para o espaço global e o acesso através de índices como foo [i] em um loop em cada um dos meus processos, que parece colocá-lo em uma área de memória compartilhada / semântica de COW com os processos, para que não exploda o uso da memória (permanece em ~ 3 Gigabytes)

No entanto, de acordo com os benchmarks de desempenho / rastreamento, parece que a grande maioria do tempo do aplicativo é gasta no modo "adquirir" ...

Então, eu estava pensando se há alguma maneira de transformar essa lista em algum tipo de bloqueio / leitura apenas, para que eu possa acabar com parte da etapa de aquisição para ajudar a acelerar o acesso ainda mais.

Editar 1: Aqui está a primeira linha de saída do perfil do aplicativo

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}

Edição 2: Aqui está um exemplo da estrutura da 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") )

A partir de agora, a lista do SIM deve ser somente leitura.

questionAnswers(1)

yourAnswerToTheQuestion