Python de alto rendimiento, 2ª edición

Book description

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Puede que tu código Python funcione correctamente, pero necesitas que lo haga más rápido. Actualizada para Python 3, esta edición ampliada te muestra cómo localizar los cuellos de botella en el rendimiento y acelerar significativamente tu código en programas de gran volumen de datos. Al explorar la teoría fundamental que subyace a las opciones de diseño, Python de alto rendimiento te ayuda a comprender mejor la implementación de Python.

¿Cómo aprovechas las arquitecturas multinúcleo o los clusters? ¿O construir un sistema que se amplíe y reduzca sin perder fiabilidad? Los programadores experimentados de Python aprenderán soluciones concretas a muchas cuestiones, junto con historias de guerra de empresas que utilizan Python de alto rendimiento para el análisis de medios sociales, el aprendizaje automático productivo y mucho más.

  • Conoce mejor NumPy, Cython y los perfiladores
  • Aprende cómo Python abstrae la arquitectura informática subyacente
  • Utiliza el perfilado para encontrar cuellos de botella en el tiempo de CPU y el uso de memoria
  • Escribe programas eficientes eligiendo las estructuras de datos adecuadas
  • Acelera los cálculos matriciales y vectoriales
  • Utilizar herramientas para compilar Python a código máquina
  • Gestionar simultáneamente múltiples operaciones de E/S y de cálculo
  • Convierte código multiprocesador para ejecutarlo en clusters locales o remotos
  • Despliega código más rápido utilizando herramientas como Docker

Table of contents

  1. Prólogo
  2. Prefacio
    1. A quién va dirigido este libro
    2. Para quién no es este libro
    3. Lo que aprenderás
    4. Python 3
    5. Cambios desde Python 2.7
    6. Licencia
    7. Cómo hacer una atribución
    8. Erratas y comentarios
    9. Convenciones utilizadas en este libro
    10. Utilizar ejemplos de código
    11. Aprendizaje en línea O'Reilly
    12. Cómo contactar con nosotros
    13. Agradecimientos
  3. 1. Entender el Python Performant
    1. El Sistema Informático Fundamental
      1. Unidades de cálculo
      2. Unidades de memoria
      3. Capas de comunicación
    2. Reunir los elementos fundamentales
      1. La informática idealizada frente a la máquina virtual Python
    3. ¿Por qué utilizar Python?
    4. Cómo ser un programador de alto rendimiento
      1. Buenas prácticas laborales
      2. Algunas reflexiones sobre las buenas prácticas con los cuadernos
      3. Devuelve la alegría a tu trabajo
  4. 2. Perfilar para encontrar cuellos de botella
    1. Perfilar eficazmente
    2. Presentación del Conjunto de Julia
    3. Cálculo del Conjunto de Julia completo
    4. Enfoques sencillos para cronometrar y un decorador
    5. Cronometraje sencillo mediante el comando tiempo de Unix
    6. Utilizar el módulo cProfile
    7. Visualizar la salida del perfil c con SnakeViz
    8. Uso de line_profiler para mediciones línea a línea
    9. Uso de memory_profiler para diagnosticar el uso de memoria
    10. Introspección de un proceso existente con PySpy
    11. Bytecode: Bajo el capó
      1. Utilizar el módulo dis para examinar el Bytecode de CPython
      2. Diferentes enfoques, diferente complejidad
    12. Pruebas unitarias durante la optimización para mantener la corrección
      1. No-op @perfil Decorador
    13. Estrategias para perfilar tu código con éxito
    14. Recapitulación
  5. 3. Listas y tuplas
    1. Una búsqueda más eficaz
    2. Listas frente a tuplas
      1. Listas como matrices dinámicas
      2. Tuplas como matrices estáticas
    3. Recapitulación
  6. 4. Diccionarios y conjuntos
    1. ¿Cómo funcionan los diccionarios y los conjuntos?
      1. Insertar y recuperar
      2. Supresión
      3. Redimensionar
      4. Funciones Hash y Entropía
    2. Diccionarios y espacios de nombres
    3. Recapitulación
  7. 5. Iteradores y generadores
    1. Iteradores para series infinitas
    2. Evaluación del generador perezoso
    3. Recapitulación
  8. 6. Cálculo de matrices y vectores
    1. Introducción al problema
    2. ¿No son suficientemente buenas las listas Python?
      1. Problemas de asignar demasiado
    3. Fragmentación de la memoria
      1. Comprender el perf
      2. Tomar decisiones con los resultados de perf
      3. Introduce numpy
    4. Aplicación de numpy al problema de la difusión
      1. Asignaciones de memoria y operaciones in situ
      2. Optimizaciones Selectivas: Encontrar lo que hay que arreglar
    5. numexpr: Hacer más rápidas y sencillas las operaciones in situ
    6. Un cuento con moraleja: Verifica las "Optimizaciones" (scipy)
    7. Lecciones de las optimizaciones matriciales
    8. Pandas
      1. Modelo interno de Pandas
      2. Aplicar una función a muchas filas de datos
      3. Construir marcos de datos y series a partir de resultados parciales en lugar de concatenarlos
      4. Hay más de una forma (y posiblemente más rápida) de hacer un trabajo
      5. Consejos para un desarrollo eficaz de Pandas
    9. Recapitulación
  9. 7. Compilar en C
    1. ¿Qué tipo de ganancias de velocidad son posibles?
    2. Compiladores JIT frente a AOT
    3. ¿Por qué la información tipográfica ayuda a que el código funcione más rápido?
    4. Utilizar un compilador de C
    5. Repasar el ejemplo del Conjunto de Julia
    6. Cython
      1. Compilar una versión en Python puro con Cython
    7. pyximport
      1. Anotaciones de Cython para analizar un bloque de código
      2. Añadir algunas anotaciones de tipo
    8. Cython y numpy
      1. Paralelizar la solución con OpenMP en una máquina
    9. Numba
      1. Numba para compilar NumPy para Pandas
    10. PyPy
      1. Diferencias en la Recogida de Basura
      2. Ejecutar PyPy e instalar módulos
    11. Resumen de las mejoras de velocidad
    12. Cuándo utilizar cada tecnología
      1. Otros próximos proyectos
    13. Unidades de procesamiento gráfico (GPU)
      1. Grafos dinámicos: PyTorch
      2. Perfilado básico de la GPU
      3. Consideraciones sobre el rendimiento de las GPU
      4. Cuándo utilizar GPUs
    14. Interfaces de funciones externas
      1. ctipos
      2. cffi
      3. f2py
      4. Módulo CPython
    15. Recapitulación
  10. 8. E/S asíncrona
    1. Introducción a la programación asíncrona
    2. ¿Cómo funciona async/await?
      1. Oruga en serie
      2. Evento
      3. tornado
      4. aiohttp
    3. Carga de trabajo CPU-I/O compartida
      1. Serie
      2. Resultados por lotes
      3. Asíncrono completo
    4. Recapitulación
  11. 9. El Módulo de multiprocesamiento
    1. Una visión general del módulo multiprocesamiento
    2. Estimación de Pi mediante el método de Montecarlo
    3. Estimación de Pi mediante procesos e hilos
      1. Utilizar objetos de Python
      2. Sustituir el multiprocesamiento por Joblib
      3. Números aleatorios en sistemas paralelos
      4. Utilizar numpy
    4. Encontrar números primos
      1. Colas de trabajo
    5. Verificación de primos mediante comunicación entre procesos
      1. Solución en serie
      2. Solución de piscina ingenua
      3. Una solución para piscinas menos ingenua
      4. Utilizar Gestor.Valor como Indicador
      5. Utilizar Redis como indicador
      6. Utilizar RawValue como indicador
      7. Utilizar mmap como indicador
      8. Utilizar mmap como Bandera Redux
    6. Compartir datos numpy con multiprocesamiento
    7. Sincronizar el acceso a archivos y variables
      1. Bloqueo de archivos
      2. Bloquear un valor
    8. Recapitulación
  12. 10. Clusters y colas de trabajo
    1. Ventajas de la agrupación
    2. Inconvenientes de la agrupación
      1. Pérdida de 462 millones de dólares en Wall Street por una mala estrategia de actualización del clúster
      2. Interrupción mundial de 24 horas de Skype
    3. Diseños comunes de agrupaciones
    4. Cómo iniciar una solución en clúster
    5. Formas de Evitar el Dolor al Utilizar Racimos
    6. Dos soluciones de agrupación
      1. Utilizar IPython Parallel para apoyar la investigación
      2. Pandas en paralelo con Dask
    7. NSQ para una agrupación robusta de la producción
      1. Colas
      2. Pub/sub
      3. Cálculo de Prima Distribuida
    8. Otras herramientas de agrupación a tener en cuenta
    9. Docker
      1. Rendimiento de Docker
      2. Ventajas de Docker
    10. Recapitulación
  13. 11. Usar menos RAM
    1. Los objetos para primitivas son caros
      1. El módulo array almacena muchos objetos primitivos de forma barata
      2. Usar menos RAM en NumPy con NumExpr
    2. Comprender la RAM utilizada en una colección
    3. Bytes frente a Unicode
    4. Almacenamiento eficiente de mucho texto en RAM
      1. Probar estos enfoques con 11 millones de fichas
    5. Modelar más texto con FeatureHasher de Scikit-Learn
    6. Presentación de DictVectorizer y FeatureHasher
      1. Comparación de DictVectorizer y FeatureHasher en un problema real
    7. Matrices dispersas de SciPy
    8. Consejos para usar menos RAM
    9. Estructuras de datos probabilísticas
      1. Recuento muy aproximado con un contador Morris de 1 byte
      2. Valores K-Mínimos
      3. Filtros Bloom
      4. Contador LogLog
      5. Ejemplo real
  14. 12. Lecciones del terreno
    1. Racionalizar los procesos de ingeniería de características con Feature-engine
      1. Ingeniería de rasgos para el aprendizaje automático
      2. La Difícil Tarea de Implementar Canalizaciones de Ingeniería de Funciones
      3. Aprovechar la potencia de las bibliotecas Python de código abierto
      4. Feature-engine facilita la creación e implementación de cadenas de ingeniería de funciones
      5. Ayudar a la adopción de un nuevo paquete de código abierto
      6. Desarrollar, mantener y fomentar la contribución a las bibliotecas de código abierto
    2. Equipos de Ciencia de Datos de Alto Rendimiento
      1. ¿Cuánto tardarás?
      2. Descubrimiento y planificación
      3. Gestionar las expectativas y la entrega
    3. Numba
      1. Un ejemplo sencillo
      2. Buenas prácticas y recomendaciones
      3. Conseguir ayuda
    4. Optimizar frente a pensar
    5. Análisis de Redes Sociales de Adaptive Lab (2014)
      1. Python en Adaptive Lab
      2. Diseño de SoMA
      3. Nuestra metodología de desarrollo
      4. Mantener SoMA
      5. Consejos para los compañeros ingenieros
    6. Hacer volar el aprendizaje profundo con RadimRehurek.com (2014)
      1. El punto dulce
      2. Lecciones de optimización
      3. Conclusión
    7. Aprendizaje automático productivo a gran escala en Lyst.com (2014)
      1. Diseño de grupos
      2. Evolución del código en una empresa emergente de rápido crecimiento
      3. Construir el motor de recomendación
      4. Informes y monitoreo
      5. Algunos consejos
    8. Análisis de medios sociales a gran escala en Smesh (2014)
      1. El papel de Python en la Smesh
      2. La Plataforma
      3. Comparación de cadenas en tiempo real de alto rendimiento
      4. Informes, monitoreo, depuración e implementación
    9. PyPy para sistemas web y de procesamiento de datos de éxito (2014)
      1. Requisitos previos
      2. La base de datos
      3. La Aplicación Web
      4. OCR y Traducción
      5. Distribución de tareas y trabajadores
      6. Conclusión
    10. Colas de tareas en Lanyrd.com (2014)
      1. El papel de Python en Lanyrd
      2. Hacer que la cola de tareas funcione
      3. Informes, monitoreo, depuración e implementación
      4. Consejos a un colega desarrollador
  15. Índice
  16. Sobre los autores

Product information

  • Title: Python de alto rendimiento, 2ª edición
  • Author(s): Micha Gorelick, Ian Ozsvald
  • Release date: September 2024
  • Publisher(s): O'Reilly Media, Inc.
  • ISBN: 9781098187149