es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi código de procesamiento paralelo en Python se ejecuta más lento que el secuencial? (+ ¿cómo leer archivos TIFF rápidamente en Python?) ¿Por qué mi código de procesamiento paralelo en Python se ejecuta más lento que el secuencial? (+ ¿cómo leer archivos TIFF rápidamente en Python?)

Tengo un conjunto de imágenes TIFF grandes (3200 x 3200). Quiero cargarlas en Jupyter Notebook, calcular promedios y crear un array de numpy. Para ser concreto, cada secuencia de películas está compuesta por 10 imágenes TIFF y hay varias secuencias de películas. Quiero calcular el promedio de 10 fotogramas para cada película y devolver un array de tamaño (#secuencias de películas x 3200 x 3200).

from tifffile import tifffile
def uselibtiff(f):
    tif = tifffile.imread(f) # abrir archivo TIFF en modo lectura
    return tif
def avgFrames(imgfile_Movie, im_shape):
    im = np.zeros(im_shape)
    for img_frame in imgfile_Movie:
        frame_im = uselibtiff(img_frame)
        im += frame_im
    return im

im_avg_all = np.zeros((num_movies, im_shape[0], im_shape[1]))
for n, imgfile_Movie in enumerate(imgfiles_byMovie):
print(n)
results = avgFrames(imgfile_Movie, im_shape)/num_frames
im_avg_all[n] = results

Hasta ahora, he notado que avgFrames tarda aproximadamente 3 segundos (para 10 fotogramas por película). Quería acelerar las cosas e intenté usar multiprocessing en Python.

import multiprocessing as mp
print("Número de procesadores:", mp.cpu_count())
pool = mp.Pool(mp.cpu_count())
results = [pool.apply(avgFrames, args=(imgfile_Movie, im_shape)) for imgfile_Movie in imgfiles_byMovie]
pool.close()

Lamentablemente, el código anterior se ejecuta muy lentamente y tengo que terminarlo sin ver los resultados. ¿Qué estoy haciendo mal aquí?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo ejecutar códigos ni determinar qué puede estar causando la ejecución lenta. Sin embargo, un posible problema podría ser el tamaño grande de las imágenes que se cargan, en cuyo caso sería más eficiente cargarlas por partes en lugar de todas a la vez. Además, podría ser útil perfilar el código para identificar dónde se produce el cuello de botella y luego optimizar a partir de ahí.

Comments are closed.