Hace poco noté que Python solo está usando un núcleo a la vez para trabajar. ¿Hay alguna manera, tal vez compilaciones especiales o comandos, para que use todos los recursos (segundo núcleo)?
arcpy
arcgis-10.0
mahmoud hageer
fuente
fuente
Respuestas:
Puede usar subprocesos para aprovechar múltiples núcleos dentro de un script de Python, de modo que varias tareas puedan ejecutarse en paralelo. Pero no puede dividir una sola tarea en varios núcleos. Consulte una explicación detallada en esta pregunta frecuente: ¿ArcGIS 10 admite procesadores multinúcleo y / o sistemas operativos de 64 bits?
Si es un usuario experimentado de Python, es posible que le interese el enfoque explicado en esta presentación de usuario de Dev Summit 2014, llamada Geoprocesamiento en paralelo mediante el multiprocesamiento de Python y la metodología de ruta crítica , aún así no le permitirá usar varios núcleos para la misma tarea
De lo contrario, tendrá que esperar el lanzamiento de ArcGIS Pro (aplicación de 64 bits) más adelante este año para probar cómo funciona el subprocesamiento múltiple ... (o pruebe la Beta ahora)
fuente
Como algunos mencionaron, no hay soporte para multiprocesamiento en ArcGIS Desktop. Cuando hablo de procesar conjuntos de datos SIG en un entorno de escritorio, estoy tratando de averiguar si puedo dividir un gran flujo de trabajo en fragmentos más pequeños que se calcularán al mismo tiempo cargando múltiples núcleos. Casi todos los casos deben investigarse individualmente ya que los comportamientos de las herramientas GP pueden diferir significativamente.
Piense qué es más rápido hacer al resolver un problema matemático simple. ¿Cuál es la forma más rápida de contar todos los números del 1 al 100?
1) sumando los resultados uno por uno y sumando la suma entre sí de forma incremental (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 y así sucesivamente). Un núcleo está trabajando en esta tarea.
2) separe los valores de antemano en fragmentos individuales y sume los valores primero (1 a 30, 31 a 60 y 60 a 100). Tres núcleos funcionarán al mismo tiempo (el último paso sería sumar tres valores recibidos).
Dado que las diferentes herramientas GP son implementaciones de diferentes algoritmos con diferente notación big-O , probablemente deba abordarlos de manera diferente en términos de envío de procesos múltiples.
Un buen punto de partida sería aprender cómo funciona la biblioteca de multiprocesamiento en Python. Yo uso bastante.
También he notado que ejecutar scripts de Python desde una línea de comando usando Python de 64 bits generalmente resulta en una ejecución más rápida (en comparación con la ejecución del IDE, pero este podría no ser el caso en su máquina). El geoprocesamiento en segundo plano se introdujo en 10.1, pero intente ejecutar los scripts de Python con Python de 64 bits y vea cómo se ve afectado el rendimiento.
ArcGIS Pro nombrado en otra respuesta está disponible en beta 5 para descargar (tenga en cuenta que necesitaría ser un participante de la comunidad Esri Beta para enviar cualquier error y tener acceso a una cuenta de ArcGIS Online for Organizations para poder ejecuta el Pro).
fuente
Pypy es una versión compatible de python que se ejecuta entre 4 y 5 veces más rápido que CPython (el python "estándar").
Si eres lo suficientemente valiente como para construirlo desde la fuente, hay una rama que "puede ejecutar múltiples subprocesos independientes de CPU en el mismo proceso en paralelo". Esto significa que obtienes los beneficios de subprocesos múltiples sin tener que volver a escribir ningún código.
fuente
La respuesta simple es no. La mejor respuesta es que depende.
Debido a la implementación de CPython (la python más comúnmente utilizada), es seguro asumir que su Python no puede aprovechar la multiproceso. Ver:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
https://wiki.python.org/moin/GlobalInterpreterLock
Tenga en cuenta que IO es inmune a la GIL.
Ahora puedes trabajar sobre esto. Como otros han señalado, puede generar subprocesos y la biblioteca de multiprocesamiento puede ayudarlo.
fuente
No puedo abordar los problemas de ArcGIS, pero en cuanto al procesamiento de múltiples tareas usando Python, ¿ha considerado un administrador de tareas como Celery (celeryproject.org)? Esto requeriría que identifique diferentes tareas de procesamiento, las envíe a un "gerente" para su distribución, ejecute "trabajadores" que reciben tareas del administrador, las procese e informe los resultados.
Implementar esto no es trivial, pero tiene una flexibilidad increíble y le permite aprovechar al máximo la capacidad de procesamiento (es decir, usar esos núcleos inactivos).
fuente