que he hecho un poco de rendimiento y consumo de memoria los puntos de referencia básicos y me preguntaba si hay alguna manera de hacer las cosas aún más rápido ...Lock free read only Lista en Python?
Tengo una lista de 70.000 elemento de gigante con una ndarray numpy, y la ruta del archivo en una tupla en dicha lista.
Mi primera versión aprobó una copia en rodajas de la lista para cada uno de los procesos en el módulo Python multiproceso, pero iba a explotar el uso de RAM a más de 20 + Gigabytes
la segunda versión lo moví en el espacio global y acceda a él a través de un índice como foo [i] en un bucle en cada uno de mis procesos que parece ponerlo en un área de memoria compartida/semántica CoW con los procesos por lo que no explota el uso de la memoria (Permanece en ~ 3 Gigabytes)
Sin embargo, de acuerdo con los puntos de referencia de rendimiento/seguimiento, parece que la gran mayoría del tiempo de aplicación se dedica ahora a "adquirir" Modo ...
Así que me preguntaba si hay alguna manera de que me puedo convertir de alguna manera esta lista en una especie de lockfree/sólo lectura para que pueda deshacerse de parte del paso de adquirir para ayudar a acelerar acceda aún más.
Editar 1: Aquí está la pocos salida de línea de la parte superior del perfil 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}
Editar 2: Aquí está 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 adelante la lista SIM debe ser de solo lectura.
Mi problema es que necesito una forma de almacenar un nudy ndarray + filepath. Mi comprensión de las cosas de Array es que solo almacena 1 elemento, como decir 'c', no puede almacenar "char" – Pharaun
@Pharaun: Tal vez no obtuve la estructura de su lista correctamente. ¿Podrías hacer esto más explícito en tu pregunta? Estoy bastante seguro de que la clase 'Array' se puede usar para su aplicación. –
@Sven, he actualizado la pregunta anterior con una muestra aproximada de cómo se construye la lista en edit2, así que eso debería dar una idea ... – Pharaun