No está claro en la redacción de su pregunta si tiene la intención de acceder a la API a través de llamadas en red (una API REST, por ejemplo), o como llamadas a la biblioteca a través de una interfaz de función externa. La distinción hace una diferencia importante en el análisis de costo-beneficio.
En cualquier caso, los beneficios son la velocidad, robustez bajo carga de escala y capacidades de concurrencia mucho mejores ofrecidas por cualquiera de los idiomas.
En cualquier caso, hay un costo en la interfaz entre Python y el otro idioma.
- ¿Puedo ganar dinero vendiendo videos tutoriales de desarrollo web en mi propio sitio web?
- ¿Cuál es el concepto básico detrás de CSS?
- ¿Cómo implementan las startups la autenticación y autorización del cliente?
- ¿Cuántas etiquetas H1 puedes tener en una sola página web? ¿Incluso importa?
- ¿Qué se espera de un estudiante que trabaja en el desarrollo de software (back end y front end)?
- Debe obtener la abstracción correcta y tener la separación correcta de preocupaciones
- Debe tener muy claro qué idioma / componente administra el estado.
- Los datos pasados a través de la interfaz tienen un costo, en comparación con el paso de datos en un idioma. Es más complicado de administrar, puede requerir conversión y / o formatos intermedios, amenaza con ser un cuello de botella de red / memoria / recurso.
En cualquier caso, los costos de usar dos idiomas en un proyecto incluyen
- Se requiere una base de habilidades más amplia (más personas o más personas altamente calificadas o una combinación de ambas)
- Más complejo de soportar (herramientas, pruebas, etc.)
Red de comunicacion
Si su arquitectura es una aplicación Python que se comunica con este componente de back-end a través de algún protocolo de red, otro beneficio es la arquitectura realmente escalable. Hay muchas historias exitosas de Internet (Twitter, Facebook y más) en las que los componentes que se muestran al público están en un lenguaje dinámico (por los rápidos beneficios de desarrollo y los ricos marcos web disponibles) y los componentes de back-end están en un alto rendimiento mecanografiado estáticamente idioma.
Interfaz de la biblioteca
Escribir una biblioteca de Python principalmente en otro idioma es definitivamente una cosa. Numpy está escrito principalmente en C, con Python proporcionando solo las abstracciones de nivel superior.
Dicho eso
- Numpy claramente proporciona algo (funciones matemáticas complejas) para las cuales Python nativo es una herramienta pobre.
- Como Terry Lambert ha detallado, C es mucho más simple llamar desde Python que Go o Haskell. El costo de una interfaz Python to Go / Haskell es más alto (aunque ambos tienen una historia de concurrencia para ofrecer que C no).
Ahora, no usaría Python para escribir el núcleo de un servidor web. Pero escribir bibliotecas centrales para su servidor web en otro idioma no resuelve un problema crucial para un componente de servidor web, que mencioné en la primera parte de mi respuesta: estado. La concurrencia o el subprocesamiento múltiple son esenciales para los servicios web y, por lo tanto, no son la fortaleza de Python. Pero si el otro idioma solo proporciona una biblioteca, entonces
- Python realmente posee el estado. No es una victoria
- La biblioteca permite el arranque de un motor de servidor web administrado por el tiempo de ejecución del otro idioma, con llamadas de Python que se comunican a través de algún mecanismo de IPC.
La opción 1 es tonta. La opción 2 es factible, especialmente si puede registrar devoluciones de llamada en código Python. Pero se parece mucho a la cola que mueve al perro. Creo que sería más sensato escribir un componente de servidor web que podría llamar a Python por algunas cosas, que al revés. Deje que el servidor web llame a Python por el rico conjunto de abstracción en que Python es bueno. No haga que Python intente administrar algo que no entiende.
Resumen
Tiene que hacer un análisis complejo de costo-beneficio y realmente tiene que justificar los costos. La mayoría de los proyectos que mezclan Python o Ruby con un lenguaje estático no comenzaron de esa manera; hicieron todo en el lenguaje dinámico hasta que tuvieron un producto comprobado que tuvo que ampliarse, momento en el que invirtieron en el otro idioma.
Nota:
Tengo que estar en desacuerdo, hasta cierto punto, con Terry Lambert cuando dice “Go está destinado a encajar en el mismo nicho de programación de back-end del servidor que Python en primer lugar”. Ese es un nicho donde los casos de uso de Python y Go se superponen (con Python también ocupan otros roles) y llenan ese nicho de maneras muy diferentes. Go tiene el rendimiento en bruto, la seguridad de tipo y la historia de concurrencia, pero Python lo supera en términos de abstracción. Go es en realidad anti-abstracción, tanto es así que copió el bucle for de Python, mantuvo los peores bits (la sintaxis y la semántica inconsistentes en diferentes tipos) y tiró la mayoría de los bits buenos.
Entonces puedo ver un caso para usar Go para los bits de rendimiento y Python para el resto. Pero haga que separen los componentes que se comunican a través de los enchufes o ponga Go en el asiento del conductor, con Python como extensión.