En las carreras de Ingeniería de Computación/Informática/Sistemas, Ciencia de la computación, entre otras relacionadas con la computación, se estudian distintos métodos para resolver problemas usando la programación, se estudian estructuras de datos y un sin fin de temas que muchos aprenden y usan, otros solo aprenden y el resto ni se toma la molestia en aprender. Entre todo ese pensum de estudio, hablaré de algo que por más simple que parezca, resuelve una gran cantidad de problemas al momento de procesar datos.
Erase una vez un día como hoy, cual sea… Estaba realizando un sincronizador de imágenes en la empresa donde trabajo, el tema era monitorear todo el día una carpeta con un demonio, mi idea era hacerlo en Python, encontré una librería que abstraía todo el proceso de monitoreo llamada fsmonitor, que ya se encuentra disponible en Fedora (yum install python-fsmonitor), PIllow PIL para el procesamiento de imágenes, y hasta ahí todo bien. Lograba convertir las imágenes en varios tamaños, y subía por FTP a un servidor. Las primeras pruebas eran con una o dos imágenes, funcionaba perfecto, ahora que pasaba cuando probaba con 10 o 20? … No me saltaba ningún error, sencillamente convertía el 50%, no sabía el porqué… Luego pensé, “CLARO! Si las respuestas de modificaciones al monitorear las carpetas, me arroja los nombre de los archivos tan rápido que no da oportunidad de convertirlas todas, porque el monitor abre un nuevo hilo independiente de las demás tareas”, suena confuso pero mi decisión fue crear hilos para convertir las imágenes e hilos para subir por FTP, pruebo nuevamente con 10 o más archivos, y todo perfecto, las convierte, da algunos errores de conexión a FTP que luego pude solventar. Ahora, debía hacer una prueba más cercana a la realidad, 100-150 fotos en una sola pasada… Resultado: Explota el programa!
Pensé nuevamente, qué pasó?… Recreo el proceso que realiza el programa para hacer todas las tareas desde el principio hasta el final, y encontré un serio detalle, creaba tantos hilos que en un momento tardaba un poco, y en ese espacio de tiempo, se perdían datos del hilo de fsmonitor… En ese momento recordé las colas.
Colas
Las colas son secuencias de elementos caracterizadas porque las operaciones de inserción y borrado se realizan sobre extremos opuestos de la secuencia. La inserción se produce en el “final” de la secuencia, mientras que el borrado se realiza en el otro extremo, el “inicio” de la secuencia.
Las restricciones definidas para una cola hacen que el primer elemento que se inserta en ella sea, igualmente, el primero en ser extraido de la estructura. Si una serie de elementos A, B, C, D, E se insertan en una cola en ese mismo orden, entonces los elementos irán saliendo de la cola en el ordenen que entraron. Por esa razón, en ocasiones, las colas se conocen con el nombre de listas o secuencias FIFO (First In First Out, el primero que entra es el primero que sale).
Un ejemplo común para explicar este concepto es la cola del supermercado, llegan 10 personas a pagar en caja, el primero que llegó es el primero en ser atendido, hasta terminar de atender a los que están esperando en la cola, si llega otra persona, se coloca al final de la cola.
Cómo resolvió mi problema el uso de colas?
fsmonitor, al trabajar en un hilo independiente, va devolviendo valores de las operaciones realizadas en una carpeta determinada, sin importar que se almacenó o se utilizó toda la información, solo devuelve y ya. Aprovechando ese comportamiento, con la librería Queue de Python, logré implementar una cola que almacenara todos los valores que devolvía fsmonitor, para luego ir procesando esos valores sin perder información, usé cola también para la subida al FTP, subía las imágenes, una por una, de esta manera no colapsaba la conexión del servidor y me permitía mantener un uso discreto de los recursos.
Conclusión
Esta experiencia, me demostró lo importante de las colas, para mantener el orden en el caos en muchos casos. Los estudiantes de las carreras afines a la computación deben o están en la obligación de aprender a usar las estructuras de datos en problemas de la vida real, puede salvar horas de programación una simple cola, obviamente no todo es cola, existen otras estructuras de datos, que son aplicadas en otros casos, pero es importante siempre tener en cuenta esas cosas que a veces parecen básicas, pero en el fondo son la solución de un problema.