2010-06-03 14 views
19

Incrustar el intérprete de Python en un C/C++ application is well documented. ¿Cuál es el mejor enfoque para ejecutar múltiples intérpretes de Python en múltiples subprocesos del sistema operativo (es decir, un intérprete en un hilo del sistema operativo dentro del mismo proceso) que se invocan desde la aplicación C/C++? Tales aplicaciones también pueden tener problemas relacionados con la fragmentación de memoria y limitations of Py_Finalize().Múltiples intérpretes de Python integrados en varios hilos del sistema operativo invocados desde el programa C/C++

Uno de estos métodos pueden ser los siguientes:

  1. hilo del pitón y por lo tanto GIL discapacitados en pyconfig.h que sea sencillo (#undef WITH_THREAD)
  2. Todas las variables globales mutables de código fuente Python Interpreter trasladó a la estructura asignada en montón a la que se hace referencia a través de Thread Local Storage (Referencia: Python on a Phone).

Mis preguntas son:

  1. ¿Hay alguna mejor enfoque?
  2. ¿Hay alguna herramienta que pueda automatizar la conversión de variables globales del código fuente del intérprete de Python a la estructura asignada en el montón a la que se hace referencia mediante TLS (almacenamiento local de subprocesos)?

Temas similares se discuten aquí:

+5

El conjunto de problemas para los que la solución óptima es múltiples interpeters integrados Python es extremadamente pequeño.Antes de gastar demasiado esfuerzo yendo por esta ruta, estoy muy seguro de que una solución de múltiples procesos para pasar mensajes no es práctica. – Rakis

+0

Cuando dice "OS", ¿probablemente quiere decir "proceso"? Si es así, el 'y' del intérprete de comandos hace casi todo lo que quieras. Los sistemas operativos suelen funcionar a nivel de proceso. Si quiere decir "proceso", corrija su pregunta. Si realmente crees que quieres decir "hilo", aclara por qué crees que los hilos del SO son tan importantes. –

Respuesta

3

No es exactamente una respuesta a su pregunta, pero se puede utilizar procesos separados en lugar de hilos, entonces los problemas deberían desaparecer.

Pros:

  • No hay necesidad de cortar pitón (y asegurándose de que el resultado funciona en todos los casos previstos)
  • Probablemente menos esfuerzo de desarrollo general
  • Fácil actualización a nuevas versiones pitón
  • Interfaces claramente definidas entre diferentes procesos, por lo tanto, más fáciles de obtener y depurar

Co ns:

Si utiliza la memoria compartida para IPC, el código de aplicación resultante no debería diferir mucho de lo que se obtendría con hilos

Dado que algunas personas argumentan que siempre debe use processes over threads, al menos lo consideraría como una alternativa si se ajusta a sus limitaciones de alguna manera.

Cuestiones relacionadas