¿Python solo usa un núcleo a la vez para trabajar?

13

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)?

mahmoud hageer
fuente
1
Si está ejecutando un proceso por lotes para tareas repetidas y el script está haciendo lo correcto y utiliza el 100% de un núcleo para hacer algo útil, puede que no sea tan peligroso. Inicie un segundo proceso que ejecute el otro núcleo también al 100%. El efecto bruto puede ser mejor que con un proceso roscado. La situación es diferente si solo tiene que procesar una tarea pesada.
user30184
Esto ya se discute, vea este hilo para obtener más información y soluciones gis.stackexchange.com/questions/55048/…
iRfAn
¿Sería capaz de editar su pregunta para aclarar si se trata de Python en general o más específicamente ArcPy (como lo aluden sus etiquetas), por favor? Si es lo último, ¿puede incluir algunos detalles para demostrar que este es el caso, es decir, cómo lo notó?
PolyGeo

Respuestas:

15

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)

GISGe
fuente
4

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).

Alex Tereshenkov
fuente
1

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.

campana
fuente
0

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.

sellsword
fuente
1
I / O es inmune, pero también lo está llamando a la mayoría de las funciones implementadas en C, incluidas la mayoría de las herramientas GP y todo en numpy. El GIL es menos una limitación en entornos prácticos de SIG de lo que uno pensaría.
Jason Scheirer
0

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).

KenH
fuente