Más de lo que nunca quisiste aprender sobre JIT, guardas y especialización https://podcast.jcea.es/python/11
En lo que sigue, cuando se habla de CPython, se refiere alintérprete de referencia de Python, que está escrito en lenguajeC: https://www.python.org/downloads/.
Participantes:
Eduardo Castro, email:info@ecdesign.es. Conectando desde AGuarda.
Jesús Cea, email: jcea@jcea.es, twitter:@jcea, https://blog.jcea.es/,https://www.jcea.es/. Conectando desde Madrid.
Javier, conectando desde Madrid.
Víctor Ramírez, twitter: @virako,programador python y amante de vim, conectando desde Huelva.
Miguel Sánchez, email:msanchez@uninet.edu, conectando desdeCanarias.
Audio editado por Pablo Gómez, twitter:@julebek.
La música de la entrada y la salida es "Lightning Bugs", de JasonShaw. Publicada en https://audionautix.com/ con licencia- Creative Commons Attribution 4.0 InternationalLicense.
[00:52] Aviso de que se está grabando. Temas legales.
[01:52] Valor de publicar estos audios y las dificultades parahacerlo.
[02:42] Métodos mágicos:
[04:12] Problemas con PIP 20.3.2:https://github.com/pypa/pip/issues/9284.
[05:52] ¿Actualizar a la última versión o esperar?
Poder "echar atrás" fácil.
Acumular cambios pendientes es deuda técnica.
[10:42] Google caídohttps://www.theguardian.com/technology/2020/dec/14/google-suffers-worldwide-outage-with-gmail-youtube-and-other-services-down.
[11:02] Generación de wheels en varios sistemas:https://pythonwheels.com/.
auditwheel: https://pypi.org/project/auditwheel/.
¿Generación de Wheels en Microsoft Windows?
[13:12] Caché local de PIP https://pip.pypa.io/en/stable/.
[14:17] Event Sourcinghttps://dev.to/barryosull/event-sourcing-what-it-is-and-why-its-awesome.
[14:42] De momento se puede usar el viejo "resolver" dedependencias de PIP.
Se puede usar la opción -use-deprecated=legacy-resolver.
Esa opción se puede meter también en el fichero deconfiguración, para no tener que escribirlo en cadainvocación.
Jesús Cea comete el pecado de meter paquetes Python en elsistema operativo.
[17:02] Batallitas de Jesús Cea.
Jesús lleva dos años dándole vueltas a esto: bpo35930:"Raising an exception raised in a "future" instance willcreate reference cycles":https://bugs.python.org/issue35930.
Explicación detallada del asunto.
Brainstorming.
[21:22] Visión a alto nivel del recolector de basuras dePython (cpython)
Contador de referencias. Inmediato, pero no recogeciclos.
Si se crean instancias y no se destruyen, se llama a unrecolector "pesado" que también recoge ciclos.
Esto puede ser problemático al arrancar el programa,antes de que la creación/destrucción de objetos se"estabilice".
gc.disable():https://docs.python.org/3/library/gc.html#gc.disable.
Jesús Cea "abusa" de los destructores y de que seejecuten cuando él quiere. Lo práctico contra lo puro.
Jesús ofrece cervezas.
gc.collect():https://docs.python.org/3/library/gc.html#gc.collect. Estosirve tanto para recoger los ciclos como para comprobar situ programa tiene ciclos de memoria o no.
Futures:https://docs.python.org/3/library/concurrent.futures.html.
[35:29] Módulo Manhole https://pypi.org/project/manhole/.
Explorar un programa en producción.
Tracemalloc:https://docs.python.org/3/library/tracemalloc.html.
DTrace: http://dtrace.org/blogs/about/.
py-spy: https://pypi.org/project/py-spy/.
Pérdidas de memoria: Recordar lo hablado ya en tertuliasanteriores.
jemalloc: http://jemalloc.net/.
MALLOC_PERTURB_:https://debarshiray.wordpress.com/2016/04/09/malloc_perturb_/.
[42:52] Micropython: https://micropython.org/.
ESP8266: https://en.wikipedia.org/wiki/ESP8266.
Bluetooth Low Energy:https://en.wikipedia.org/wiki/Bluetooth_Low_Energy.
¿Qué ventajas aporta usar Micropython?
[52:42] ¿El futuro será mejor? O no.
Desperdicio de recursos materiales porque realmente sobran.
Python es mucho más lento que C y no digamos ensamblador.
[57:17] Cambiar Python por un lenguaje más rápido.
[01:00:20] Python no pinta nada en móviles.
[01:02:07] Acelerar Python.
Subinterpreters: PEP 554:https://www.python.org/dev/peps/pep-0554/.
Si los subintérpretes no compartiesen NADA, se podríanlanzar simultaneamente en varios núcleos de la CPU sincompetir por un GILhttps://en.wikipedia.org/wiki/Global_interpreter_lockúnico.
JIT:https://es.wikipedia.org/wiki/Compilaci%C3%B3n_en_tiempo_de_ejecuci%C3%B3n.
PYPY: https://www.pypy.org/.
Numba: https://numba.pydata.org/.
Cython: https://cython.org/.
Python es "potencialmente" muy dinámico, pero en la prácticalos programas no lo son. Jesús pone varios ejemplos.
Conversación densa entre Jesús y Javier.
Guardas para comprobar que la especialización siguesiendo correcta. Por ejemplo, para los diccionarios:PEP 509 Add a private version to dict:https://www.python.org/dev/peps/pep-0509/
"Tipado" más estricto.
MYPY: http://mypy-lang.org/.
Pydantic:https://pydantic-docs.helpmanual.io/.
Comprobación de tipos en tiempo de ejecución.
Descubrimiento de tipos en tiempo de ejecución,proporcionando "especialización".
Eduardo Castro entra y simplifica la discusión.
Jesús explica qué hace "a+b" internamente.
[01:29:22] PyParallel http://pyparallel.org/
Memoria transaccional:https://es.wikipedia.org/wiki/Memoria_transaccional.
(nota de Jesús Cea): Los sistemas de persistencia Pythondescritos en tertulias anteriores pueden considerarse casosde memoria transaccional... si somos flexibles.
"Colorear" objetos y que dos hilos no puedan acceder aobjetos del mismo color simultaneamente o en transaccionesconcurrentes.
[01:30:42] PYPY https://www.pypy.org/ es tan sofisticado queno lo entiende ni dios.
Jesús Cea lo ha intentado y se ha rendido.
[01:35:22] Compilar CPython a WebAssemblyhttps://en.wikipedia.org/wiki/WebAssembly va más rápido que enC nativo.
[01:36:02] Simplemente compilar código python con Cythonhttps://cython.org/ sin declaración de tipos dobla lavelocidad de ejecución.
[01:36:57] Subinterpreters: PEP 554:https://www.python.org/dev/peps/pep-0554/.
Poder usar todos los núcleos de la CPU.
[01:38:07] Seguimos hablando del asunto.
[01:39:07] Un problema es que Python tiene la vocación defuncionar en todas partes, así que hay resistencia paraimplementar mejoras solo en ciertas plataformas.
[01:40:17] Cierre.
Dadle una pesada al bug bpo35930: "Raising an exception raisedin a "future" instance will create reference cycles":https://bugs.python.org/issue35930.
[01:41:13] Final.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More