Pregunta

Supongamos que tengo una función C (++) teniendo un número entero, y está unido a pitón (C) con API de Python, por lo que se puede llamar de pitón:

import c_module
c_module.f(10)

Ahora, quiero que paralelizar. El problema es: ¿Cómo funciona el GIL en este caso? Supongamos que tengo una cola de números para ser procesado, y algunos trabajadores (threading.Thread) que trabajan en paralelo, cada uno de ellos llamando c_module.f(number) donde number se toma de una cola.

La diferencia con el caso habitual, cuando GIL bloquear el intérprete, es que ahora no es necesario que el intérprete para evaluar c_module.f porque se compila. Así que la pregunta es: ¿en este caso el procesamiento paralelo es realmente

¿Fue útil?

Solución

Hilos Actualmente ejecutar el código de extensión C para el cual el GIL fue liberado explícitamente se ejecutará en paralelo. Ver http: // docs .python.org / API C / init.html # hilo de estado-and-the-global-intérprete-cerradura para lo que tiene que hacer en su extensión.

hilos

Python son más útiles para I O ejecución / unido o para GUI capacidad de respuesta. Yo no haría ejecución Python-pesado con hilos. Si quieres paralelismo garantizado, echa un vistazo a la biblioteca multiprocessing.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top