tutorial - Múltiples intérpretes de Python integrados en varios subprocesos del sistema operativo invocados desde el programa C/C++
python tutorial (1)
No es exactamente una respuesta a tu pregunta, pero puedes usar procesos separados en lugar de hilos, entonces los problemas deberían desaparecer.
Pros:
- No es necesario piratear Python (y asegurarse de que el resultado funcione en todos los casos previstos)
- Probablemente menos esfuerzo de desarrollo en general
- Fácil actualización a nuevas versiones de python
- Interfaces claramente definidas entre diferentes procesos, por lo tanto más fáciles de corregir y depurar
Contras:
- Tal vez un poco más de sobrepeso, dependiendo de su plataforma ( procesos relativamente ligeros en linux )
Si usa la memoria compartida para IPC, el código de la aplicación resultante no debería diferir mucho de lo que obtendría con los subprocesos.
Dado que algunas personas argumentan que siempre se deben usar procesos sobre subprocesos , al menos lo consideraría una alternativa si se ajusta a sus limitaciones de alguna manera.
La incorporación del intérprete de Python en una aplicación C / C ++ está bien documentada . ¿Cuál es el mejor método para ejecutar múltiples intérpretes de Python en varios subprocesos del sistema operativo (es decir, un intérprete en un subproceso de un sistema operativo dentro del mismo proceso) que se invocan desde la aplicación C / C ++? Dichas aplicaciones también pueden tener problemas relacionados con la fragmentación de la memoria y las limitaciones de Py_Finalize () .
Uno de estos enfoques puede ser el siguiente:
- Hilo de Python y, por lo tanto, GIL deshabilitado en pyconfig.h para mantenerlo simple (#undef WITH_THREAD)
- Todas las variables globales mutables del código fuente de Python Interpreter se trasladaron a una estructura asignada a un montón a la que se hace referencia a través de Thread Local Storage (Referencia: Python en un teléfono ).
Mis preguntas son:
- ¿Hay algún enfoque mejor?
- ¿Hay alguna herramienta que pueda automatizar la conversión de variables globales del código fuente de Python Interpreter a una estructura asignada en heap a través de TLS (Thread Local Storage)?
Temas similares se discuten aquí: