Tengo un script con una interfaz GTK (GObject) que uso para publicar en mi blog de fotos.imagen cargando problemas de rendimiento con python y gobject
Estoy tratando de mejorar su capacidad de respuesta cargando las imágenes en un hilo de fondo.
No he tenido suerte tratando de rellenar objetos GdkPixbuf a partir de un hilo de fondo, todo lo que he intentado solo se atasca.
Así que como alternativa, pensé que leería los archivos en el hilo de fondo y luego los insertaría en GdkPixbuf a pedido. Este enfoque ha producido algunos resultados de rendimiento sorprendentes y más bien deprimentes que me preguntan si estoy haciendo algo groseramente incorrecto.
Estoy jugando con jpegs ligeramente comprimidos fuera de mi cámara, tienden a estar alrededor de los 3.8mb.
Aquí está la carga de la imagen original de bloqueo:
pb = GdkPixbuf.Pixbuf.new_from_file(image_file)
Esto promedia aproximadamente 550 ms, no es enorme, pero bastante tedioso si quieres hojear una docena de imágenes.
Entonces dividirlo, aquí está el archivo leído:
data = bytearray(open(self.image_file).read())
Esto da un promedio de 15 ms, eso es muy bonito, pero también un poco preocupante, si podemos leer el archivo en 15 ms cuáles son las otras 535ms se gastan ¿en?
Por cierto, la llamada bytearray existe porque PixBufLoader no aceptaría los datos de lo contrario.
Y entonces la carga Pixbuf:
pbl = GdkPixbuf.PixbufLoader()
pbl.write(data, len(data))
pbl.close()
pb = pbl.get_pixbuf()
Este promedio es alrededor de 1400ms, que es casi 3 veces más que dejar que GTK haga todo.
¿Estoy haciendo algo mal aquí?
Ha considerado el uso de Python herramientas de perfilado para ver dónde se gasta el tiempo? –
la llamada cercana de Pixbufloader es actualmente el 94% de mi tiempo de ejecución, no recibo ningún detalle dentro de esa llamada. –