Primero, algunas aclaraciones: Python es un lenguaje. Hay varios intérpretes diferentes que pueden ejecutar código escrito en el lenguaje Python. La implementación de referencia (CPython) suele ser a lo que se hace referencia cuando alguien habla de "Python" como si fuera una implementación, pero es importante ser preciso al hablar de las características de rendimiento, ya que pueden diferir enormemente entre implementaciones.
¿Cómo y dónde adoptamos el SRP sin comprometer el rendimiento en Python, ya que su implementación inherente lo afecta directamente?
Caso 1.)
Si tiene código Python puro (<= Python Language versión 3.5, 3.6 tiene "soporte de nivel beta") que solo se basa en módulos Python puros, puede adoptar SRP en todas partes y usar PyPy para ejecutarlo. PyPy ( https://morepypy.blogspot.com/2019/03/pypy-v71-released-now-uses-utf-8.html ) es un intérprete de Python que tiene un compilador Just in Time (JIT) y puede eliminar la función llamar a gastos generales siempre que tenga tiempo suficiente para "calentarse" rastreando el código ejecutado (unos segundos IIRC). ** **
Si está restringido a usar el intérprete CPython, puede extraer las funciones lentas en extensiones escritas en C, que se precompilarán y no sufrirán ninguna sobrecarga del intérprete. Todavía puede usar SRP en todas partes, pero su código se dividirá entre Python y C. Si esto es mejor o peor para la mantenibilidad que abandonar selectivamente SRP pero apegarse solo al código Python depende de su equipo, pero si tiene secciones críticas de rendimiento de su código, sin duda será más rápido que incluso el código Python puro más optimizado interpretado por CPython. Muchas de las bibliotecas matemáticas más rápidas de Python utilizan este método (IIRC numpy y scipy). Lo cual es un buen ejemplo del caso 2 ...
Caso 2.)
Si tiene código Python que usa extensiones C (o se basa en bibliotecas que usan extensiones C), PyPy puede o no ser útil dependiendo de cómo estén escritas. Consulte http://doc.pypy.org/en/latest/extending.html para obtener detalles, pero el resumen es que CFFI tiene una sobrecarga mínima mientras que CTypes es más lento (usarlo con PyPy puede ser incluso más lento que CPython)
Cython ( https://cython.org/ ) es otra opción con la que no tengo tanta experiencia. Lo menciono por completo para que mi respuesta pueda "sostenerse por sí misma", pero no reclame ninguna experiencia. Debido a mi uso limitado, sentí que tenía que trabajar más para obtener las mismas mejoras de velocidad que podía obtener "gratis" con PyPy, y si necesitaba algo mejor que PyPy, era igual de fácil escribir mi propia extensión C ( lo que tiene la ventaja si reutilizo el código en otro lugar o extraigo parte de él en una biblioteca, todo mi código aún puede ejecutarse con cualquier intérprete de Python y no es necesario que Cython lo ejecute).
Tengo miedo de estar "encerrado" en Cython, mientras que cualquier código escrito para PyPy también puede ejecutarse en CPython.
** Algunas notas adicionales sobre PyPy en producción
Tenga mucho cuidado al hacer cualquier elección que tenga el efecto práctico de "encerrarlo" en PyPy en una gran base de código. Debido a que algunas bibliotecas de terceros (muy populares y útiles) no funcionan bien por las razones mencionadas anteriormente, puede causar decisiones muy difíciles más adelante si se da cuenta de que necesita una de esas bibliotecas. Mi experiencia es principalmente en el uso de PyPy para acelerar algunos (pero no todos) microservicios que son sensibles al rendimiento en un entorno de empresa donde agrega una complejidad insignificante a nuestro entorno de producción (ya tenemos varios idiomas implementados, algunos con diferentes versiones principales como 2.7 vs 3.5 corriendo de todos modos).
He descubierto que usar PyPy y CPython regularmente me obligó a escribir código que solo se basa en garantías hechas por la especificación del lenguaje en sí, y no en detalles de implementación que están sujetos a cambios en cualquier momento. Puede que pensar en estos detalles sea una carga adicional, pero lo encontré valioso en mi desarrollo profesional, y creo que es "saludable" para el ecosistema de Python en su conjunto.