llamar a varios ++ funciones de C en hilos Python usando
-
26-09-2019 - |
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
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
.