<\/HEAD>
El Problema<\/STRONG><\/SPAN><\/P>Cualquiera que haya tenido que hacer algún tipo de scripting con arcpy que involucre tareas repetitivas complejas sabe cuánto puede tardar en completarse. Incluso algo tan simple como exportar unos pocos miles de documentos de mapa a imágenes puede potencialmente tomar horas en ejecutarse. Parte de la razón de esto se debe al hecho de que python, por defecto, se ejecuta en un solo hilo. Un programador familiarizado con otros lenguajes, como Java o C++ podría tener la brillante idea de abordar esta ineficiencia usando multithreading para compartir el trabajo entre todos los CPUs. Desafortunadamente, el multithreading en python no funciona de la misma manera.<\/P><\/P>CPython, sobre el cual está construido arcpy, emplea lo que se conoce como Global Interpreter Lock (GIL) para evitar que un hilo modifique un objeto mientras otro hilo está trabajando con ese objeto, manteniendo la recolección de basura funcionando sin problemas. Sin embargo, la desventaja de esto es que los scripts multithreading en python no pueden aprovechar completamente todos los CPUs disponibles, impidiendo cualquier ganancia real en velocidad.<\/P><\/P>La Solución<\/STRONG><\/SPAN><\/P>Entra el módulo multiprocessing. Este módulo emplea procesos en lugar de hilos, evitando así el GIL. Debido a esto, los programadores pueden aprovechar completamente múltiples procesadores en cualquier máquina dada, y aunque los procesos tienen mayor sobrecarga que los hilos, se pueden lograr ganancias significativas en velocidad.<\/P><\/P>Esta presentación mostrará las mejores prácticas para usar el módulo multiprocessing con arcpy, y mostrará ejemplos de cómo actualmente estamos usando multithreading para proporcionar soluciones a los clientes.<\/P><\/P>Coautores:<\/P>Brett Gaines<\/A>Kelvin Fox<\/A><\/SPAN><\/P><\/BODY><\/HTML>