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
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.
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.
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 –
- 1. Enlazado de Python y GIL
- 2. ¿Cómo supera un servidor web python GIL
- 3. ¿El Python GIL es realmente por intérprete?
- 4. ¿Evita la ejecución mutuamente recursiva de desencadenantes?
- 5. Javascript: anula o evita la ejecución
- 6. ¿Cuál es la versión del GIL de C#?
- 7. Python: ¿pasar o suspender para procesos de larga ejecución?
- 8. Python: Ejecución de procesos Daemon en Windows 7
- 9. Liberando Python GIL mientras estaba en el código C++
- 10. ¿Hay alguna manera fácil de saber cuánto tiempo se pasa esperando el Python GIL?
- 11. Recuperar nombres de procesos en ejecución
- 12. Multiprocesamiento en Python al tiempo que limita el número de procesos en ejecución
- 13. Administración de procesos de Python
- 14. monitorear procesos python pegados
- 15. La ejecución de dos procesos en paralelo desde makefile
- 16. obtener toda la información de procesos en ejecución usando QProcess
- 17. Obtener la lista de procesos en ejecución (Visual C++)
- 18. Cómo usar extensiones C en python para evitar GIL
- 19. Lista de procesos en ejecución en Windows de 64 bits
- 20. ¿Qué tiene que ver el GIL de Python con el recolector de basura?
- 21. Enumerar procesos en ejecución en Delphi
- 22. Verificar procesos en ejecución en C
- 23. Registro Python desde procesos múltiples
- 24. cómo matar procesos y procesos secundarios de python?
- 25. comunicación entre procesos en python
- 26. python Pool with worker Procesos
- 27. Obtener otros tamaños de ventana de procesos en ejecución en Python
- 28. Procesos persistentes Post Python Pool
- 29. ¿Los bloqueos son innecesarios en el código de Python de subprocesos múltiples debido a GIL?
- 30. Android, AsyncTask, procesos de larga ejecución y cambios de orientación
Seguro que me está ayudando mucho hoy. ¡Gracias! – whatWhat
¡De nada! –
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. –