M\xe1s de lo que nunca quisiste aprender sobre JIT, guardas y especializaci\xf3n https://podcast.jcea.es/python/11\n
En lo que sigue, cuando se habla de CPython, se refiere al\nint\xe9rprete de referencia de Python, que est\xe1 escrito en lenguaje\nC: https://www.python.org/downloads/.
\nParticipantes:
\nEduardo Castro, email:\n info@ecdesign.es. Conectando desde A\n Guarda.
\nJes\xfas Cea, email: jcea@jcea.es, twitter:\n @jcea, https://blog.jcea.es/,\n https://www.jcea.es/. Conectando desde Madrid.
\nJavier, conectando desde Madrid.
\nV\xedctor Ram\xedrez, twitter: @virako,\n programador python y amante de vim, conectando desde Huelva.
\nMiguel S\xe1nchez, email:\n msanchez@uninet.edu, conectando desde\n Canarias.
\nAudio editado por Pablo G\xf3mez, twitter:\n@julebek.
\nLa m\xfasica de la entrada y la salida es "Lightning Bugs", de Jason\nShaw. Publicada en https://audionautix.com/ con licencia\n- Creative Commons Attribution 4.0 International\nLicense.
\n[00:52] Aviso de que se est\xe1 grabando. Temas legales.
\n[01:52] Valor de publicar estos audios y las dificultades para\n hacerlo.
\n[02:42] M\xe9todos m\xe1gicos:
\n__set_name__()
. PEP 487:\n https://www.python.org/dev/peps/pep-0487/.[04:12] Problemas con PIP 20.3.2:\n https://github.com/pypa/pip/issues/9284.
\n[05:52] \xbfActualizar a la \xfaltima versi\xf3n o esperar?
\nPoder "echar atr\xe1s" f\xe1cil.
\nAcumular cambios pendientes es deuda t\xe9cnica.
\n[10:42] Google ca\xeddo\n https://www.theguardian.com/technology/2020/dec/14/google-suffers-worldwide-outage-with-gmail-youtube-and-other-services-down.
\n[11:02] Generaci\xf3n de wheels en varios sistemas:\n https://pythonwheels.com/.
\nauditwheel: https://pypi.org/project/auditwheel/.
\n\xbfGeneraci\xf3n de Wheels en Microsoft Windows?
\n[13:12] Cach\xe9 local de PIP https://pip.pypa.io/en/stable/.
\n[14:17] Event Sourcing\n https://dev.to/barryosull/event-sourcing-what-it-is-and-why-its-awesome.
\n[14:42] De momento se puede usar el viejo "resolver" de\n dependencias de PIP.
\nSe puede usar la opci\xf3n -use-deprecated=legacy-resolver
.
Esa opci\xf3n se puede meter tambi\xe9n en el fichero de\n configuraci\xf3n, para no tener que escribirlo en cada\n invocaci\xf3n.
\nJes\xfas Cea comete el pecado de meter paquetes Python en el\n sistema operativo.
\n[17:02] Batallitas de Jes\xfas Cea.
\nJes\xfas lleva dos a\xf1os d\xe1ndole vueltas a esto: bpo35930:\n "Raising an exception raised in a "future" instance will\n create reference cycles":\n https://bugs.python.org/issue35930.
\nExplicaci\xf3n detallada del asunto.
\nBrainstorming.
\n[21:22] Visi\xf3n a alto nivel del recolector de basuras de\n Python (cpython)
\nContador de referencias. Inmediato, pero no recoge\n ciclos.
\nSi se crean instancias y no se destruyen, se llama a un\n recolector "pesado" que tambi\xe9n recoge ciclos.
\nEsto puede ser problem\xe1tico al arrancar el programa,\n antes de que la creaci\xf3n/destrucci\xf3n de objetos se\n "estabilice".
\ngc.disable()
:\n https://docs.python.org/3/library/gc.html#gc.disable.
Jes\xfas Cea "abusa" de los destructores y de que se\n ejecuten cuando \xe9l quiere. Lo pr\xe1ctico contra lo puro.
\nJes\xfas ofrece cervezas.
\ngc.collect()
:\n https://docs.python.org/3/library/gc.html#gc.collect. Esto\n sirve tanto para recoger los ciclos como para comprobar si\n tu programa tiene ciclos de memoria o no.
Futures:\n https://docs.python.org/3/library/concurrent.futures.html.
\n[35:29] M\xf3dulo Manhole https://pypi.org/project/manhole/.
\nExplorar un programa en producci\xf3n.
\nTracemalloc:\n https://docs.python.org/3/library/tracemalloc.html.
\nDTrace: http://dtrace.org/blogs/about/.
\npy-spy: https://pypi.org/project/py-spy/.
\nP\xe9rdidas de memoria: Recordar lo hablado ya en tertulias\n anteriores.
\njemalloc: http://jemalloc.net/.
\nMALLOC_PERTURB_
:\n https://debarshiray.wordpress.com/2016/04/09/malloc_perturb_/.
[42:52] Micropython: https://micropython.org/.
\nESP8266: https://en.wikipedia.org/wiki/ESP8266.
\nBluetooth Low Energy:\n https://en.wikipedia.org/wiki/Bluetooth_Low_Energy.
\n\xbfQu\xe9 ventajas aporta usar Micropython?
\n[52:42] \xbfEl futuro ser\xe1 mejor? O no.
\nDesperdicio de recursos materiales porque realmente sobran.
\nPython es mucho m\xe1s lento que C y no digamos ensamblador.
\n[57:17] Cambiar Python por un lenguaje m\xe1s r\xe1pido.
\nGo:\n https://en.wikipedia.org/wiki/Go_(programming_language).
\nRust:\n https://en.wikipedia.org/wiki/Rust_(programming_language).
\n[01:00:20] Python no pinta nada en m\xf3viles.
\n[01:02:07] Acelerar Python.
\nSubinterpreters: PEP 554:\n https://www.python.org/dev/peps/pep-0554/.
\nSi los subint\xe9rpretes no compartiesen NADA, se podr\xedan\nlanzar simultaneamente en varios n\xfacleos de la CPU sin\ncompetir por un GIL\nhttps://en.wikipedia.org/wiki/Global_interpreter_lock\n\xfanico.
\nJIT:\n https://es.wikipedia.org/wiki/Compilaci%C3%B3n_en_tiempo_de_ejecuci%C3%B3n.
\nPYPY: https://www.pypy.org/.
\nNumba: https://numba.pydata.org/.
\nCython: https://cython.org/.
\nPython es "potencialmente" muy din\xe1mico, pero en la pr\xe1ctica\n los programas no lo son. Jes\xfas pone varios ejemplos.
\nConversaci\xf3n densa entre Jes\xfas y Javier.
\nGuardas para comprobar que la especializaci\xf3n sigue\n siendo correcta. Por ejemplo, para los diccionarios:\n PEP 509 Add a private version to dict:\n https://www.python.org/dev/peps/pep-0509/
\n"Tipado" m\xe1s estricto.
\nMYPY: http://mypy-lang.org/.
\nPydantic:\n https://pydantic-docs.helpmanual.io/.
\nComprobaci\xf3n de tipos en tiempo de ejecuci\xf3n.
\nDescubrimiento de tipos en tiempo de ejecuci\xf3n,\n proporcionando "especializaci\xf3n".
\nEduardo Castro entra y simplifica la discusi\xf3n.
\nJes\xfas explica qu\xe9 hace "a+b" internamente.
\n[01:29:22] PyParallel http://pyparallel.org/
\nMemoria transaccional:\n https://es.wikipedia.org/wiki/Memoria_transaccional.
\n(nota de Jes\xfas Cea): Los sistemas de persistencia Python\n descritos en tertulias anteriores pueden considerarse casos\n de memoria transaccional... si somos flexibles.
\n"Colorear" objetos y que dos hilos no puedan acceder a\n objetos del mismo color simultaneamente o en transacciones\n concurrentes.
\n[01:30:42] PYPY https://www.pypy.org/ es tan sofisticado que\n no lo entiende ni dios.
\nJes\xfas Cea lo ha intentado y se ha rendido.
\n[01:35:22] Compilar CPython a WebAssembly\n https://en.wikipedia.org/wiki/WebAssembly va m\xe1s r\xe1pido que en\n C nativo.
\n[01:36:02] Simplemente compilar c\xf3digo python con Cython\n https://cython.org/ sin declaraci\xf3n de tipos dobla la\n velocidad de ejecuci\xf3n.
\n[01:36:57] Subinterpreters: PEP 554:\n https://www.python.org/dev/peps/pep-0554/.
\nPoder usar todos los n\xfacleos de la CPU.
\n[01:38:07] Seguimos hablando del asunto.
\n[01:39:07] Un problema es que Python tiene la vocaci\xf3n de\n funcionar en todas partes, as\xed que hay resistencia para\n implementar mejoras solo en ciertas plataformas.
\n[01:40:17] Cierre.
\nDadle una pesada al bug bpo35930: "Raising an exception raised\nin a "future" instance will create reference cycles":\nhttps://bugs.python.org/issue35930.
\n[01:41:13] Final.
\n