2009-06-14 16 views
9

Tengo curiosidad sobre cómo funciona Global Interpreter Lock en python. Si tengo un lanzamiento de aplicación C++, cuatro instancias separadas de un script python se ejecutarán en paralelo en núcleos separados, o el GIL irá incluso más allá del único proceso que se inició y controlará todos los procesos de Python, independientemente del proceso que lo engendró ?¿La ejecución de procesos python separados evita el GIL?

Respuesta

20

El GIL solo afecta a los hilos dentro de un único proceso. El módulo multiprocessing es, de hecho, una alternativa al threading que permite que los programas Python usen varios núcleos & c. Su escenario también permitirá el uso de múltiples núcleos.

+1

Seguro que me está ayudando mucho hoy. ¡Gracias! – whatWhat

+0

¡De nada! –

+3

A "Plain Old Unix Pipeline" de aplicaciones Python a menudo es un mejor diseño que múltiples subprocesos. Una cartera de procesos evita todos los problemas GIL. También evita cualquier posible problema de seguridad de subprocesos en cualquier biblioteca que esté utilizando. Es fácil de crear usando el caparazón. El sistema operativo maneja la sincronización por usted; solo lee desde sys.stdin y escribe en sys.stdout. –

1

Como señala Alex Martelli, puede evitar el GIL ejecutando múltiples procesos, solo quiero agregar y señalar que el GIL es una limitación de la implementación (CPython) y no de Python en general, es posible implementar Python sin esta limitación Stackless Python me viene a la mente.

+0

Este es un concepto erróneo común acerca de stackless. Stackless no ayuda a aprovechar los múltiples núcleos. Ver http://www.stackless.com/pipermail/stackless/2007-August/001963.html –

Cuestiones relacionadas